resource.h (394 lines of code) (raw):
/*
* Trade secret of Alibaba Group R&D.
* Copyright (c) 2010 Alibaba Group R&D. (unpublished)
*
* All rights reserved. This notice is intended as a precaution against
* inadvertent publication and does not imply publication or any waiver
* of confidentiality. The year included in the foregoing notice is the
* year of creation of the work.
*
*/
#ifndef __RESOURCE_H_V6__
#define __RESOURCE_H_V6__
#include <string>
#include <vector>
#include <map>
#include <set>
#include <memory>
#include "rapidjson/writer.h"
#include "rapidjson/document.h"
namespace aliyun_log_sdk_v6
{
class Resource
{
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const = 0;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const = 0;
std::string ToJsonString() const;
std::string ToRequestJsonString(const bool array = false) const;
virtual void FromJson(const rapidjson::Value& value) = 0;
void FromJsonString(const std::string& jsonStr);
virtual ~Resource() {}
};
class ConsumerGroup: public Resource
{
private:
std::string mConsumerGroupName;
uint32_t mTimeoutInSec;
bool mInOrder;
public:
ConsumerGroup(const std::string& consumergroup, const uint32_t timeoutInSec, const bool inOrder):
mConsumerGroupName(consumergroup), mTimeoutInSec(timeoutInSec), mInOrder(inOrder)
{}
public:
const std::string& GetConsumerGroupName() const { return mConsumerGroupName; }
const uint32_t GetTimeoutInSec() const { return mTimeoutInSec; }
const bool GetInOrder() const { return mInOrder; }
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
};
class ConsumerGroupCheckpoint: public Resource
{
private:
int mShard;
std::string mCheckpoint;
uint64_t mUpdateTime;
public:
ConsumerGroupCheckpoint(const int shard, const std::string& checkpoint):
mShard(shard), mCheckpoint(checkpoint)
{}
ConsumerGroupCheckpoint(const int shard, const std::string& checkpoint, const uint64_t updateTime):
mShard(shard), mCheckpoint(checkpoint), mUpdateTime(updateTime)
{}
const int GetShard() const{ return mShard; }
const std::string& GetCheckpoint() const { return mCheckpoint; }
const uint64_t GetUpdateTime() const { return mUpdateTime; }
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
};
class Heartbeat: public Resource
{
private:
std::vector<uint32_t> mShards;
public:
void Add(const uint32_t shard){ mShards.push_back(shard); }
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
};
class LogStore : public Resource
{
private:
std::string mLogStoreName;
int64_t mTtl;
int64_t mShardCount;
int64_t mCreateTime;
int64_t mLastModifyTime;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
LogStore();
LogStore(const std::string& logStoreName, const int64_t ttl, const int64_t shardCount);
~LogStore() {}
void SetLogStoreName(const std::string& logStoreName) { mLogStoreName = logStoreName; }
void SetTTL(const int64_t ttl) { mTtl = ttl; }
void SetShardCount(const int64_t shardCount) { mShardCount = shardCount; }
std::string GetLogStoreName() const { return mLogStoreName; }
int64_t GetTTL() const { return mTtl; }
int64_t GetShardCount() const { return mShardCount; }
int64_t GetCreateTime() const { return mCreateTime; }
int64_t GetLastModifyTime() const { return mLastModifyTime; }
};
class ConfigInputDetail : public Resource
{
private:
std::string mLogType;
std::string mLogPath;
std::string mFilePattern;
bool mLocalStorage;
std::string mTimeFormat;
std::string mLogBeginRegex;
std::string mRegex;
std::vector<std::string> mKey;
std::vector<std::string> mFilterKey;
std::vector<std::string> mFilterRegex;
std::string mTopicFormat;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
ConfigInputDetail();
ConfigInputDetail(const std::string& logType, const std::string& logPath, const std::string& filePattern, const bool localStorage, const std::string& timeFormat, const std::string& logBeginRegex, const std::string& regex, const std::vector<std::string>& key, const std::vector<std::string>& filterKey, const std::vector<std::string>& filterRegex, const std::string& topicFormat);
~ConfigInputDetail() {}
void SetLogType(const std::string& logType) { mLogType = logType; }
void SetLogPath(const std::string& logPath) { mLogPath = logPath; }
void SetFilePattern(const std::string& filePattern) { mFilePattern = filePattern; }
void SetLocalStorage(const bool localStorage) { mLocalStorage = localStorage; }
void SetTimeFormat(const std::string& timeFormat) { mTimeFormat = timeFormat; }
void SetLogBeginRegex(const std::string& logBeginRegex) { mLogBeginRegex = logBeginRegex; }
void SetRegex(const std::string& regex) { mRegex = regex; }
void SetKey(const std::vector<std::string>& key) { mKey = key; }
void SetFilterKey(const std::vector<std::string>& filterKey) { mFilterKey = filterKey; }
void SetFilterRegex(const std::vector<std::string>& filterRegex) { mFilterRegex = filterRegex; }
void SetTopicFormat(const std::string& topicFormat) { mTopicFormat = topicFormat; }
std::string GetLogType() const { return mLogType; }
std::string GetLogPath() const { return mLogPath; }
std::string GetFilePattern() const { return mFilePattern; }
bool GetLocalStorage() const { return mLocalStorage; }
std::string GetTimeFormat() const { return mTimeFormat; }
std::string GetLogBeginRegex() const { return mLogBeginRegex; }
std::string GetRegex() const { return mRegex; }
std::vector<std::string> GetKey() const { return mKey; }
std::vector<std::string> GetFilterKey() const { return mFilterKey; }
std::vector<std::string> GetFilterRegex() const { return mFilterRegex; }
std::string GetTopicFormat() const { return mTopicFormat; }
};
class ConfigOutputDetail : public Resource
{
private:
std::string mProjectName;
std::string mLogStoreName;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
ConfigOutputDetail();
ConfigOutputDetail(const std::string& projectName, const std::string& logStoreName);
~ConfigOutputDetail() {}
void SetProjectName(const std::string& projectName) { mProjectName = projectName; }
void SetLogStoreName(const std::string& logStoreName) { mLogStoreName = logStoreName; }
std::string GetProjectName() const { return mProjectName; }
std::string GetLogStoreName() const { return mLogStoreName; }
};
class Config : public Resource
{
private:
std::string mConfigName;
std::string mInputType;
ConfigInputDetail mInputDetail;
std::string mOutputType;
ConfigOutputDetail mOutputDetail;
std::string mLogSample;
int64_t mCreateTime;
int64_t mLastModifyTime;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
Config();
Config(const std::string& configName, const std::string& inputType, const ConfigInputDetail& inputDetail, const std::string& outputType, const ConfigOutputDetail& outputDetail, const std::string& logSample = "");
~Config() {}
void SetConfigName(const std::string& configName) { mConfigName = configName; }
void SetInputType(const std::string& inputType) { mInputType = inputType; }
void SetInputDetail(const ConfigInputDetail& inputDetail) { mInputDetail = inputDetail; }
void SetOutputType(const std::string& outputType) { mOutputType = outputType; }
void SetOutputDetail(const ConfigOutputDetail& outputDetail) { mOutputDetail = outputDetail; }
void SetLogSample(const std::string& logSample) { mLogSample = logSample; }
std::string GetConfigName() const { return mConfigName; }
std::string GetInputType() const { return mInputType; }
ConfigInputDetail GetInputDetail() const { return mInputDetail; }
std::string GetOutputType() const { return mOutputType; }
ConfigOutputDetail GetOutputDetail() const { return mOutputDetail; }
std::string GetLogSample() const { return mLogSample; }
int64_t GetCreateTime() const { return mCreateTime; }
int64_t GetLastModifyTime() const { return mLastModifyTime; }
};
class Line : public Resource
{
private:
bool mIncludeKeysSet;
bool mExcludeKeysSet;
std::vector<std::string> mToken;
std::vector<std::string> mIncludeKeys;
std::vector<std::string> mExcludeKeys;
bool mCaseSensitive;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
Line() { mIncludeKeysSet = false; mExcludeKeysSet = false; }
~Line() {}
void SetToken(const std::vector<std::string>& token) { mToken = token; }
void SetIncludeKeys(const std::vector<std::string>& includeKeys) { mIncludeKeysSet = true; mIncludeKeys = includeKeys; }
void SetExcludeKeys(const std::vector<std::string>& excludeKeys) { mExcludeKeysSet = true; mExcludeKeys = excludeKeys; }
void SetCaseSensitive(const bool caseSensitive) { mCaseSensitive = caseSensitive; }
std::vector<std::string> GetToken() const { return mToken; }
std::vector<std::string> GetIncludeKeys() const { return mIncludeKeys; }
std::vector<std::string> GetExcludeKeys() const { return mExcludeKeys; }
bool GetCaseSensitive() const { return mCaseSensitive; }
};
class KeyContent : public Resource
{
private:
std::vector<std::string> mToken;
bool mCaseSensitive;
std::string mAlias;
bool mChn;
std::string mIndexType;
bool mDocValue;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
KeyContent() {mChn = false;mDocValue = false;mIndexType = "text";}
~KeyContent() {}
void SetToken(const std::vector<std::string>& token) { mToken = token; }
void SetCaseSensitive(const bool caseSensitive) { mCaseSensitive = caseSensitive; }
void SetChnToken(const bool chn) { mChn = chn; }
void SetDocValue(const bool docValue) { mDocValue = docValue; }
void SetIndexType(const std::string &indexType) { mIndexType = indexType; }
std::vector<std::string> GetToken() const { return mToken; }
bool GetCaseSensitive() const { return mCaseSensitive; }
const std::string& GetIndexType() const { return mIndexType; }
};
class Keys : public Resource
{
private:
std::map<std::string, std::shared_ptr<KeyContent>> mKeys;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
Keys() {}
~Keys() {}
void AddKey(const std::string &key, const std::shared_ptr<KeyContent> &keyContent);
std::map<std::string, std::shared_ptr<KeyContent>> GetKeys() const { return mKeys; }
};
class JsonKeyContent : public KeyContent
{
private:
bool mIndexAll;
int mMaxDepth;
Keys mJsonKeys;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer> &writer) const;
virtual void FromJson(const rapidjson::Value &value);
JsonKeyContent() : mIndexAll(true), mMaxDepth(-1) { SetIndexType("json"); }
~JsonKeyContent() {}
void SetIndexAll(const bool indexAll) { mIndexAll = indexAll; }
void SetMaxDepth(const int maxDepth) { mMaxDepth = maxDepth; }
void SetJsonKeys(const Keys &jsonKeys) { mJsonKeys = jsonKeys; }
};
class AllKeys : public Resource
{
private:
std::vector<std::string> mToken;
bool mCaseSensitive;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
AllKeys() {}
~AllKeys() {}
std::vector<std::string> GetToken() const { return mToken; }
bool GetCaseSensitive() const { return mCaseSensitive; }
};
class Index : public Resource
{
private:
bool mLineSet;
bool mKeysSet;
bool mAllKeysSet;
uint32_t mTtl;
AllKeys mAllKeys;
Line mLine;
Keys mKeys;
bool mLogReduceEnable;
std::vector<std::string> mLogReduceWhiteList;
std::vector<std::string> mLogReduceBlackList;
int mMaxTextLen;
int64_t mLastModifyTime;
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
Index() { mLineSet = false; mKeysSet = false; mAllKeysSet = false; mLogReduceEnable = false; mMaxTextLen = 0;}
Index(uint32_t ttl) { mLineSet = false; mKeysSet = false; mAllKeysSet = false; mTtl = ttl; mLogReduceEnable = false; mMaxTextLen = 0;}
~Index() {}
AllKeys GetAllKeys() const { return mAllKeys; }
Line GetLine() const { return mLine; }
Keys GetKeys() const { return mKeys; }
uint32_t GetTTL() const { return mTtl; }
int64_t GetLastModifyTime() const { return mLastModifyTime; }
void SetTTL(const uint32_t ttl) { mTtl = ttl; }
void SetLine(const Line& line) { mLineSet = true; mLine = line; }
void SetKeys(const Keys& keys) { mKeysSet = true; mKeys = keys; }
void SetLogReduceEnable(const bool logReduceEnalbe) { mLogReduceEnable = logReduceEnalbe; }
void SetLogReduceWhiteList(const std::vector<std::string> &logReduceWhiteList) { mLogReduceWhiteList = logReduceWhiteList; }
void SetLogReduceBlackList(const std::vector<std::string> &logReduceBlackList) { mLogReduceBlackList = logReduceBlackList; }
};
typedef enum ACLPrivilege
{
ACL_WRITE = 0,
ACL_ADMIN,
ACL_READ,
ACL_LIST,
ACL_OWNER
}ACLPrivilege;
class ACL : public Resource
{
private:
std::string mAction;
std::string mPrinciple;
std::set<std::string> mPrivilege;
int64_t mCreateTime;
int64_t mLastModifyTime;
void PrivilegeToString(const ACLPrivilege& privilegeValue, std::string& privilege);
public:
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
ACL();
~ACL() {}
void SetAction(const std::string& action) { mAction = action; }
void SetPrinciple(const std::string& principle) { mPrinciple = principle; }
void AddPrivilege(const ACLPrivilege& privilege);
void RemovePrivilege(const ACLPrivilege& privilege);
std::string GetAction() const { return mAction; }
std::string GetPrinciple() const { return mPrinciple; }
std::vector<std::string> GetPrivilege() const;
int64_t GetCreateTime() const { return mCreateTime; }
int64_t GetLastModifyTime() const { return mLastModifyTime; }
};
class GroupAttribute : public Resource
{
private:
std::string mExternalName;
std::string mGroupTopic;
public:
GroupAttribute();
GroupAttribute(const std::string& externalName, const std::string& groupTopic);
~GroupAttribute() {}
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
void SetExternalName(const std::string& externalName) { mExternalName = externalName; }
void SetGroupTopic(const std::string& groupTopic) { mGroupTopic = groupTopic; }
std::string GetExternalName() const { return mExternalName; }
std::string GetGroupTopic() const { return mGroupTopic; }
};
class MachineGroup : public Resource
{
private:
std::string mGroupName;
std::string mGroupType;
GroupAttribute mGroupAttribute;
std::string mMachineIdentifyType;
std::vector<std::string> mMachineList;
int64_t mCreateTime;
int64_t mLastModifyTime;
public:
MachineGroup();
MachineGroup(const std::string& groupName, const std::string& machineIdentifyType, const std::vector<std::string>& machineList);
~MachineGroup() {}
virtual void SetRequestValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void SetFullValues(rapidjson::Writer<rapidjson::StringBuffer>& writer) const;
virtual void FromJson(const rapidjson::Value& value);
void SetGroupName(const std::string& groupName) { mGroupName = groupName; }
void SetGroupType(const std::string& groupType) { mGroupType = groupType; }
void SetGroupAttribute(const GroupAttribute& groupAttribute) { mGroupAttribute = groupAttribute; }
void SetMachineIdentifyType(const std::string& machineIdentifyType) { mMachineIdentifyType = machineIdentifyType; }
void SetMachineList(const std::vector<std::string>& machineList) { mMachineList = machineList; }
std::string GetGroupName() const { return mGroupName; }
std::string GetGroupType() const { return mGroupType; }
GroupAttribute GetGroupAttribute() const { return mGroupAttribute; }
std::string GetMachineIdentifyType() const { return mMachineIdentifyType; }
std::vector<std::string> GetMachineList() const { return mMachineList; }
int64_t GetCreateTime() const { return mCreateTime; }
int64_t GetLastModifyTime() const { return mLastModifyTime; }
};
}
#endif