#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace wfr { namespace wfs { class Workflow; class Activity; class ActivityInstance; } } namespace wfr { namespace eventsystem { namespace odbmodel { class Workflow; class Activity; class ActivityInstance; } class Event; class WorkflowStatusEvent; class ActivityStatusEvent; class ActivityInstanceStatusEvent; class ComputingResourceStatusEvent; class ComponentStatusEvent; class SQLiteLogger : public EventListener { protected: static void dbwriterfunc(SQLiteLogger* logger); std::unique_ptr loggerThread; bool threadRunning = false; bool threadBreakFlag = false; std::mutex threadMutex; std::condition_variable threadCondition; std::queue> eventQueue; std::string filename; std::unique_ptr dbHandle; bool readyFlag = false; int statProcessedEvents; int statWrittenEvents; typedef std::map> workflowMap_t; typedef std::map> activityMap_t; typedef std::map> activityInstanceMap_t; workflowMap_t workflowMap; activityMap_t activityMap; activityInstanceMap_t activityInstanceMap; void handleWorkflowStatusEvent(WorkflowStatusEvent &event); void handleActicityStatusEvent(ActivityStatusEvent &event); void handleActicityInstanceStatusEvent(ActivityInstanceStatusEvent &event); void handleComputingResourceStatusEvent(ComputingResourceStatusEvent &event); void handleComponentStatusEvent(ComponentStatusEvent &event); std::shared_ptr getWorkflowFromWfsMap(wfs::Workflow& wf); void persistWorkflow(std::shared_ptr& wfp, wfs::Workflow& wf); std::shared_ptr getActivityFromWfsMap(const wfs::Activity& act); void persistActivity(std::shared_ptr& ap, wfs::Activity& a); std::shared_ptr getActivityInstanceFromWfsMap(wfs::ActivityInstance& act); void persistActivityInstance(std::shared_ptr& ap, wfs::ActivityInstance& a); void writeWorkflowStatus(std::shared_ptr& pWf, WorkflowStatusEvent &event); void writeActivityStatus(std::shared_ptr& pA, ActivityStatusEvent &event); void writeActivityInstanceStatus(std::shared_ptr& pA, ActivityInstanceStatusEvent &event); void writeComputingResourceStatus(std::shared_ptr& pwf, std::shared_ptr& pai, ComputingResourceStatusEvent &event); void writeComponentStatus(std::shared_ptr& pwf, ComponentStatusEvent &event); public: SQLiteLogger(std::string filename); virtual ~SQLiteLogger(); bool isReady() { return readyFlag; } virtual void notifyEvent(const std::shared_ptr& event) noexcept; }; } /* namespace eventsystem */ } /* namespace wfr */