/** * The ServiceHandler class handles all service related classes and writes the services state to DDS. * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Baeuerle, SLSE, 2016-02-15 */ #pragma once #include #include #include "logger.h" #include "service_donator.h" #include class QTimer; namespace ServiceManagement { class DdsHandler; class LicenceDonator; class Service; class ServiceInformation; class ServiceProcess; class ServiceHandler final : public ServiceDonator , protected Interface::Fts::RestartServiceRequestHandler { Q_OBJECT public: explicit ServiceHandler(const std::shared_ptr &ddsHandler, const std::shared_ptr &licenceDonator); ~ServiceHandler(); bool init(); void addService(Service *service); ServiceProcess *getProcess(int serviceId, const GroupRequest &groupData) override final; void onRestartServiceRequest(const rti::core::SampleIdentity &cookie, const RestartServiceRequest &request) override final; void stopAllServices(); private Q_SLOTS: void onNewServiceInfoFromProc(const ServiceInformation &info); void onNewServiceInfoFromDds(const Core::CurrentRunningState &data, DataModification type) override final; void onHeartBeatObserverTimerTimeout(); private: // methods Service *serviceFromId(int id); ServiceProcess *serviceProcessFromPid(qint64 pid); ServiceProcess *serviceProcessFromServiceProcId(int32_t id); private: // attributes QVector m_services; QTimer *m_heartBeatObserverTimer; std::shared_ptr m_ddsHandler; std::shared_ptr m_licenceDonator; int HEARTBEAT_OBSERVER_INTERVAL = 10000; QSet m_unknownPidsWarned; LOGGER_T m_logger; }; } // namespace ServiceManagement