Fledge
An open source edge computing platform for industrial users
core_management_api.h
1 #ifndef _CORE_MANAGEMENT_API_H
2 #define _CORE_MANAGEMENT_API_H
3 /*
4  * Fledge core microservice management API.
5  *
6  * Copyright (c) 2018 Dianomic Systems
7  *
8  * Released under the Apache 2.0 Licence
9  *
10  * Author: Mark Riddoch, Massimiliano Pinto
11  */
12 #include <management_api.h>
13 #include <configuration_manager.h>
14 
15 
16 #define REGISTER_SERVICE "/fledge/service"
17 #define UNREGISTER_SERVICE "/fledge/service/([0-9A-F][0-9A-F\\-]*)"
18 #define GET_ALL_CATEGORIES "/fledge/service/category"
19 #define CREATE_CATEGORY GET_ALL_CATEGORIES
20 #define GET_CATEGORY "/fledge/service/category/([A-Za-z][a-zA-Z_0-9]*)"
21 #define GET_CATEGORY_ITEM "/fledge/service/category/([A-Za-z][a-zA-Z_0-9]*)/([A-Za-z][a-zA-Z_0-9]*)"
22 #define DELETE_CATEGORY_ITEM_VALUE "/fledge/service/category/([A-Za-z][a-zA-Z_0-9]*)/([A-Za-z][a-zA-Z_0-9]*)/(value)"
23 #define SET_CATEGORY_ITEM_VALUE GET_CATEGORY_ITEM
24 #define DELETE_CATEGORY GET_CATEGORY
25 #define DELETE_CHILD_CATEGORY "/fledge/service/category/([A-Za-z][a-zA-Z_0-9]*)/(children)/([A-Za-z][a-zA-Z_0-9]*)"
26 #define ADD_CHILD_CATEGORIES "/fledge/service/category/([A-Za-z][a-zA-Z_0-9]*)/(children)"
27 #define REGISTER_CATEGORY_INTEREST "/fledge/interest" // TODO implment this, right now it's a fake.
28 #define GET_SERVICE REGISTER_SERVICE
29 
30 #define UUID_COMPONENT 1
31 #define CATEGORY_NAME_COMPONENT 1
32 #define CATEGORY_ITEM_COMPONENT 2
33 #define ITEM_VALUE_NAME 3
34 #define CHILD_CATEGORY_COMPONENT 3
35 
36 using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;
37 
42  public:
43  CoreManagementApi(const std::string& name, const unsigned short port);
44  ~CoreManagementApi() {};
46  void registerMicroService(std::shared_ptr<HttpServer::Response> response,
47  std::shared_ptr<HttpServer::Request> request);
48  void unRegisterMicroService(std::shared_ptr<HttpServer::Response> response,
49  std::shared_ptr<HttpServer::Request> request);
50  // GET /fledge/service/category
51  void getAllCategories(std::shared_ptr<HttpServer::Response> response,
52  std::shared_ptr<HttpServer::Request> request);
53  // GET /fledge/service/category/{categoryName}
54  void getCategory(std::shared_ptr<HttpServer::Response> response,
55  std::shared_ptr<HttpServer::Request> request);
56  // GET /fledge/service/category/{categoryName}/{configItem}
57  // GET /fledge/service/category/{categoryName}/children
58  void getCategoryItem(std::shared_ptr<HttpServer::Response> response,
59  std::shared_ptr<HttpServer::Request> request);
60  // DELETE /fledge/service/category/{categoryName}/{configItem}/value
61  void deleteCategoryItemValue(std::shared_ptr<HttpServer::Response> response,
62  std::shared_ptr<HttpServer::Request> request);
63  // PUT /fledge/service/category/{categoryName}/{configItemn}
64  void setCategoryItemValue(std::shared_ptr<HttpServer::Response> response,
65  std::shared_ptr<HttpServer::Request> request);
66  // Called by DELETE /fledge/service/category/{categoryName}
67  void deleteCategory(std::shared_ptr<HttpServer::Response> response,
68  std::shared_ptr<HttpServer::Request> request);
69  // Called by DELETE /fledge/service/category/{CategoryName}/children/{ChildCategory}
70  void deleteChildCategory(std::shared_ptr<HttpServer::Response> response,
71  std::shared_ptr<HttpServer::Request> request);
72  // Called by POST /fledge/service/category
73  void createCategory(std::shared_ptr<HttpServer::Response> response,
74  std::shared_ptr<HttpServer::Request> request);
75  // Called by POST /fledge/service/category/{categoryName}/children
76  void addChildCategory(std::shared_ptr<HttpServer::Response> response,
77  std::shared_ptr<HttpServer::Request> request);
78  // Default handler for unsupported URLs
79  void defaultResource(std::shared_ptr<HttpServer::Response> response,
80  std::shared_ptr<HttpServer::Request> request);
81 
82  private:
83  void errorResponse(std::shared_ptr<HttpServer::Response> response,
84  SimpleWeb::StatusCode statusCode,
85  const std::string& entryPoint,
86  const std::string& msg);
87  void internalError(std::shared_ptr<HttpServer::Response>,
88  const std::exception&);
89  void respond(std::shared_ptr<HttpServer::Response> response,
90  SimpleWeb::StatusCode statusCode,
91  const std::string& payload);
92  void respond(std::shared_ptr<HttpServer::Response> response,
93  const std::string& payload);
94  bool getConfigurationManager(const std::string& address,
95  const unsigned short port);
96  void setConfigurationEntryPoints();
97 
98  private:
99  static CoreManagementApi* m_instance;
100  ConfigurationManager* m_config;
101 };
102 #endif
Management API server for a C++ microservice.
Definition: management_api.h:32
void addChildCategory(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Add child categories to a given category name Received POST /fledge/service/category/{categoryName}/c...
Definition: core_management_api.cpp:900
void registerMicroService(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a service registration request.
Definition: core_management_api.cpp:408
Definition: configuration_manager.h:18
void defaultResource(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Handle a bad URL endpoint call.
Definition: core_management_api.cpp:355
void setCategoryItemValue(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received PUT /fledge/service/category/{categoryName}/{configItem} Payload is {"value" : "some_data"} ...
Definition: core_management_api.cpp:672
void deleteCategory(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Delete a config category Received DELETE /fledge/service/category/{categoryName} Send to client the J...
Definition: core_management_api.cpp:737
CoreManagementApi(const std::string &name, const unsigned short port)
Construct a microservices management API manager class.
Definition: core_management_api.cpp:367
void deleteCategoryItemValue(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a DELETE /fledge/service/category/{categoryName}/{configItem}/value.
Definition: core_management_api.cpp:640
void createCategory(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Create a new configuration category Received POST /fledge/service/category.
Definition: core_management_api.cpp:801
void getCategory(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a GET /fledge/service/category/{categoryName}.
Definition: core_management_api.cpp:218
static CoreManagementApi * getInstance()
Return the singleton instance of the core management interface.
Definition: core_management_api.cpp:400
void getCategoryItem(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a GET /fledge/service/category/{categoryName}/{itemName].
Definition: core_management_api.cpp:253
Management API server for a C++ microservice.
Definition: core_management_api.h:41
void unRegisterMicroService(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a service unregister request.
Definition: core_management_api.cpp:501
void deleteChildCategory(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Delete child categories of a config category Received DELETE /fledge/service/category/{categoryName}/...
Definition: core_management_api.cpp:768
void getAllCategories(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a GET /fledge/service/category.
Definition: core_management_api.cpp:315