/* * FailureDiagnostics.h * * Created on: 8 окт. 2019 г. * Author: titov */ #ifndef SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_ #define SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_ #include "../../systemic/IProcess.hh" #include "../../systemic/IStatus.hh" #include "../../systemic/IFunctor.hh" #include "FailureInterface.hh" #include "FailureManagerInterface.hh" #include #include #include namespace processing { namespace failure { class FailureDiagnostics : public systemic::IProcess { public: typedef systemic::IFunctor IFailureReset; typedef systemic::IValue IFailureCheck; FailureDiagnostics( FailureManagerInterface &, std::pmr::memory_resource * memory ); const FaliureInterface & addFailure( IFailureCheck & failure, FailureId id, IFailureReset & reset = getDefaultReset() ); void process(); private: struct Failure : public FaliureInterface { IFailureCheck * failure = nullptr; IFailureReset * reset = nullptr; bool failure_stored; bool failure_actual; bool failure_ticket; Failure( systemic::IStatus *, IFailureReset * ); bool check(); bool stored() const; bool actual() const; bool acknowledge(); bool ticket(); }; typedef std::deque > Failures; FailureManagerInterface & manager; Failures failures; std::mutex failures_lock; static IFailureReset & getDefaultReset(); }; }} #endif /* SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_ */