/** * The Group class represents a group which was already startet. * $Id$ * $HeadURL$ * $Author$ * Created by Hannes Baeuerle, SLSE, 2016-02-15 */ #pragma once #include #include #include #include #include #include "logger.h" #include "dds_handler.h" #include "service_process.h" class QTimer; namespace ServiceManagement { struct GroupScheme; class GroupInformation; class ServiceDonator; class ServiceInformation; class Group final : public QObject { Q_OBJECT public: Group(const std::shared_ptr &ddsHandler, const std::shared_ptr &serviceDonator, const GroupRequest &groupData, GroupScheme *scheme, QObject *parent); ~Group(); bool setRunningState(Core::RunningState newState); void startCore(); void start(); void stop(); void restart(); void takeServicesFromGroup(Group *otherGroup); bool allProcsStopped() const; Core::ServiceGroupType type() const; int32_t domainId() const { return m_groupData.domainId(); } int32_t exercisePartitionId() const { return m_groupData.exercisePartitionId(); } int32_t replayPartitionId() const { return m_groupData.replayPartitionId(); } int32_t id() const { return m_groupId; } qint64 lastHeartbeatMSec() const; QMap serviceProcs() const; private Q_SLOTS: void onNewServiceInfo(); void onCompleteCoreTick(); private: // methods void init(); ServiceProcess *procFromPid(Q_PID pid); private: // attributes std::shared_ptr m_ddsHandler; std::shared_ptr m_serviceDonator; GroupScheme *m_scheme; int32_t m_groupId; GroupRequest m_groupData; QMap m_serviceProcs; qint64 m_completeCoreTimeout; QElapsedTimer m_elapsedTimer; int m_actPrio = 1; LOGGER_T m_logger; static int32_t s_idCounter; int getNextPrio(QList &prioList); }; } // namespace ServiceManagement