host/common/AgentHealthContract.h (151 lines of code) (raw):
#ifndef _AGENTHEALTHCONTRACT_H_
#define _AGENTHEALTHCONTRACT_H_
#include <string>
#include <vector>
#include "json_reader.h"
#include "json_writer.h"
#include "AgentHealthIssueNumbers.h"
#include <boost/algorithm/string/predicate.hpp>
#define EVENT_SOURCE_AGENT "SourceAgent"
#define EVENT_SEVERITY_ERROR "Error"
#define EVENT_SEVERITY_WARNING "Warning"
#define EVENT_SEVERITY_INFORMATION "Information"
#define EVENT_SEVERITY_UNKNOWN "Unknown"
class HealthIssue
{
public:
std::string IssueCode;
std::string Severity;
std::string Source;
std::map<std::string, std::string> MessageParams;
HealthIssue() {}
HealthIssue(std::string issueCode) :
IssueCode(issueCode),
Severity(EVENT_SEVERITY_WARNING),
Source(EVENT_SOURCE_AGENT),
MessageParams(std::map<std::string, std::string>())
{
}
HealthIssue(std::string issueCode, std::map<std::string, std::string> params) :
IssueCode(issueCode),
Severity(EVENT_SEVERITY_WARNING),
Source(EVENT_SOURCE_AGENT),
MessageParams(params)
{
}
bool is_equal(std::string issueCode) const
{
return boost::iequals(issueCode, IssueCode);
}
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "HealthIssue", false);
JSON_E(adapter, IssueCode);
JSON_E(adapter, Severity);
JSON_E(adapter, Source);
JSON_T(adapter, MessageParams);
}
};
class AgentDiskLevelHealthIssue : public HealthIssue
{
public:
std::string DiskContext;
AgentDiskLevelHealthIssue() {}
AgentDiskLevelHealthIssue(std::string diskId, std::string issueCode) :
DiskContext(diskId),
HealthIssue(issueCode)
{
}
AgentDiskLevelHealthIssue(std::string diskId, std::string issueCode, std::map<std::string, std::string> params) :
DiskContext(diskId),
HealthIssue(issueCode, params)
{
}
bool is_equal(std::string issueCode) const
{
return boost::iequals(issueCode, IssueCode);
}
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "AgentDiskLevelHealthIssue", false);
JSON_E(adapter, DiskContext);
JSON_E(adapter, IssueCode);
JSON_E(adapter, Severity);
JSON_E(adapter, Source);
JSON_T(adapter, MessageParams);
}
};
class SourceAgentProtectionPairHealthIssues
{
public:
std::vector<HealthIssue> HealthIssues;
std::vector<AgentDiskLevelHealthIssue> DiskLevelHealthIssues;
/// \brief a serializer method for JSON
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "SourceAgentProtectionPairHealthIssues", false);
JSON_E(adapter, HealthIssues);
JSON_T(adapter, DiskLevelHealthIssues);
}
};
/// \brief health issues for a protected cluster
class SourceAgentClusterProtectionHealthMessage
{
public:
std::vector<HealthIssue> HealthIssues;
/// \brief a serializer method for JSON
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "SourceAgentClusterProtectionHealthMessage", false);
JSON_T(adapter, HealthIssues);
}
};
/// \brief health issues for virtual node
class SourceAgentSharedDiskReplicationHealthMessage
{
public:
std::map < std::string, std::vector<HealthIssue> > SharedDiskHealthDetailsMap;
/// \brief a serializer method for JSON
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "SourceAgentSharedDiskReplicationHealthMessage", false);
JSON_KV_T(adapter, "SharedDiskHealthDetailsMap", SharedDiskHealthDetailsMap);
}
};
// a <key, value> pair of Health IssueCode and a serialized object of HealthIssue or AgentDiskLevelHealthIssue
typedef std::map<std::string, std::string> HealthIssueMap_t;
class SourceAgentProtectionPairHealthIssuesMap
{
public:
//the second param in the map is a HealthIssue object serialized as string in VMLevelHIsMap
HealthIssueMap_t VMLevelHIsMap;
//std::The second param in the map is AgentDiskLevelHealthIssue object serialized as string in DiskLevelHIsMap
HealthIssueMap_t DiskLevelHIsMap;
/// \brief a serializer method for JSON
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "SourceAgentProtectionpairHealthIssuesMap", false);
JSON_E(adapter, VMLevelHIsMap);
JSON_T(adapter, DiskLevelHIsMap);
}
};
class OnPremToAzureSourceAgentDiskHealthMsg
{
public:
std::string ReplicationPairContext;
double DataPendingAtSourceAgentInMB;
std::vector<HealthIssue> HealthIssues;
/// \brief a serializer method for JSON
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "OnPremToAzureSourceAgentDiskHealthMsg", false);
JSON_E(adapter, ReplicationPairContext);
JSON_E(adapter, DataPendingAtSourceAgentInMB);
JSON_T(adapter, HealthIssues);
}
};
class OnPremToAzureSourceAgentVmHealthMsg
{
public:
std::string ProtectionPairContext;
std::vector<HealthIssue> HealthIssues;
std::vector<OnPremToAzureSourceAgentDiskHealthMsg> DiskHealthDetails;
// \brief a serializer method for JSON
void serialize(JSON::Adapter& adapter)
{
JSON::Class root(adapter, "OnPremToAzureSourceAgentVmHealthMsg", false);
JSON_E(adapter, ProtectionPairContext);
JSON_E(adapter, HealthIssues);
JSON_T(adapter, DiskHealthDetails);
}
};
#endif