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_ */
|