67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
/*
|
||
* 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 <memory_resource>
|
||
#include <deque>
|
||
|
||
#include <mutex>
|
||
|
||
namespace processing { namespace failure {
|
||
|
||
class FailureDiagnostics : public systemic::IProcess {
|
||
public:
|
||
typedef systemic::IFunctor<bool> IFailureReset;
|
||
typedef systemic::IValue<bool> 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<Failure, std::pmr::polymorphic_allocator<Failure> > Failures;
|
||
|
||
FailureManagerInterface & manager;
|
||
Failures failures;
|
||
std::mutex failures_lock;
|
||
|
||
static IFailureReset & getDefaultReset();
|
||
|
||
};
|
||
|
||
}}
|
||
|
||
#endif /* SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_ */
|