Fledge
An open source edge computing platform for industrial users
management_api.h
1 #ifndef _MANAGEMENT_API_H
2 #define _MANAGEMENT_API_H
3 /*
4  * Fledge storage service.
5  *
6  * Copyright (c) 2017 OSisoft, LLC
7  *
8  * Released under the Apache 2.0 Licence
9  *
10  * Author: Mark Riddoch
11  */
12 #include <json_provider.h>
13 #include <service_handler.h>
14 #include <server_http.hpp>
15 #include <logger.h>
16 #include <string>
17 #include <time.h>
18 #include <thread>
19 
20 #define PING "/fledge/service/ping"
21 #define SERVICE_SHUTDOWN "/fledge/service/shutdown"
22 #define CONFIG_CHANGE "/fledge/change"
23 #define CONFIG_CHILD_CREATE "/fledge/child_create"
24 #define CONFIG_CHILD_DELETE "/fledge/child_delete"
25 #define SECURITY_CHANGE "^/fledge/security$"
26 
27 using HttpServer = SimpleWeb::Server<SimpleWeb::HTTP>;
28 
33  public:
34  ManagementApi(const std::string& name, const unsigned short port);
36  static ManagementApi *getInstance();
37  void start();
38  void startServer();
39  void stop();
40  void stopServer();
41  void registerStats(JSONProvider *statsProvider);
42  void registerProvider(JSONProvider *provider);
43  void registerService(ServiceHandler *serviceHandler) {
44  m_serviceHandler = serviceHandler;
45  }
46  unsigned short getListenerPort() {
47  return m_server->getLocalPort();
48  }
49  void ping(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request);
50  void shutdown(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request);
51  void configChange(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request);
52  void configChildCreate(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request);
53  void configChildDelete(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request);
54  void securityChange(std::shared_ptr<HttpServer::Response> response, std::shared_ptr<HttpServer::Request> request);
55 
56  protected:
57  static ManagementApi *m_instance;
58  std::string m_name;
59  Logger *m_logger;
60  time_t m_startTime;
61  HttpServer *m_server;
62  JSONProvider *m_statsProvider;
63  ServiceHandler *m_serviceHandler;
64  std::thread *m_thread;
65  private:
66  void respond(std::shared_ptr<HttpServer::Response>, const std::string&);
67  std::vector<JSONProvider *>
68  m_providers;
69 };
70 #endif
JSONProvider
Definition: json_provider.h:14
ManagementApi::shutdown
void shutdown(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a shutdown request, construct a reply and return to caller.
Definition: management_api.cpp:225
ManagementApi::securityChange
void securityChange(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a security change request, construct a reply and return to caller.
Definition: management_api.cpp:352
ManagementApi::configChildCreate
void configChildCreate(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a children creation request, construct a reply and return to caller.
Definition: management_api.cpp:309
ManagementApi
Management API server for a C++ microservice.
Definition: management_api.h:32
ManagementApi::ping
void ping(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a ping request, construct a reply and return to caller.
Definition: management_api.cpp:194
ManagementApi::~ManagementApi
~ManagementApi()
Management API destructor.
Definition: management_api.cpp:161
ManagementApi::getInstance
static ManagementApi * getInstance()
Return the signleton instance of the management interface.
Definition: management_api.cpp:153
ManagementApi::registerProvider
void registerProvider(JSONProvider *provider)
Register a generic provider.
Definition: management_api.cpp:183
ManagementApi::ManagementApi
ManagementApi(const std::string &name, const unsigned short port)
Construct a microservices management API manager class.
Definition: management_api.cpp:101
ManagementApi::configChange
void configChange(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a config change request, construct a reply and return to caller.
Definition: management_api.cpp:243
ManagementApi::registerStats
void registerStats(JSONProvider *statsProvider)
Register a statistics provider.
Definition: management_api.cpp:172
Logger
Fledge Logger class used to log to syslog.
Definition: logger.h:42
ManagementApi::configChildDelete
void configChildDelete(std::shared_ptr< HttpServer::Response > response, std::shared_ptr< HttpServer::Request > request)
Received a children deletion request, construct a reply and return to caller.
Definition: management_api.cpp:276
ServiceHandler
ServiceHandler abstract class - the interface that services using the management API must provide.
Definition: service_handler.h:20