Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _P_REC_DEFS_H_
00025 #define _P_REC_DEFS_H_
00026
00027 #include "I_RecDefs.h"
00028
00029 #define REC_CONFIG_FILE "records.config"
00030 #define REC_SHADOW_EXT ".shadow"
00031 #define REC_RAW_STATS_FILE "records.snap"
00032 #define REC_PIPE_NAME "librecords_pipe"
00033
00034 #define REC_MESSAGE_ELE_MAGIC 0xF00DF00D
00035
00036
00037
00038
00039 #define REC_MAX_RECORDS (2000 + TS_MAX_API_STATS)
00040
00041 #define REC_CONFIG_UPDATE_INTERVAL_MS 3000
00042 #define REC_REMOTE_SYNC_INTERVAL_MS 5000
00043
00044 #define REC_RAW_STAT_SYNC_INTERVAL_MS 5000
00045 #define REC_STAT_UPDATE_INTERVAL_MS 10000
00046
00047
00048
00049
00050
00051 #define REC_LOCAL_UPDATE_REQUIRED 1
00052 #define REC_PROCESS_UPDATE_REQUIRED (REC_LOCAL_UPDATE_REQUIRED << 1)
00053 #define REC_UPDATE_REQUIRED (REC_LOCAL_UPDATE_REQUIRED | REC_PROCESS_UPDATE_REQUIRED)
00054
00055 #define REC_DISK_SYNC_REQUIRED 1
00056 #define REC_PEER_SYNC_REQUIRED (REC_DISK_SYNC_REQUIRED << 1)
00057 #define REC_INC_CONFIG_VERSION (REC_PEER_SYNC_REQUIRED << 1)
00058 #define REC_SYNC_REQUIRED (REC_DISK_SYNC_REQUIRED | REC_PEER_SYNC_REQUIRED)
00059
00060 enum RecEntryT
00061 {
00062 RECE_NULL,
00063 RECE_COMMENT,
00064 RECE_RECORD
00065 };
00066
00067 struct RecConfigFileEntry
00068 {
00069 RecEntryT entry_type;
00070 char *entry;
00071 };
00072
00073 typedef struct RecConfigCbList_t
00074 {
00075 RecConfigUpdateCb update_cb;
00076 void *update_cookie;
00077 struct RecConfigCbList_t *next;
00078 } RecConfigUpdateCbList;
00079
00080 typedef struct RecStatUpdateFuncList_t
00081 {
00082 RecRawStatBlock *rsb;
00083 int id;
00084 RecStatUpdateFunc update_func;
00085 void *update_cookie;
00086 struct RecStatUpdateFuncList_t *next;
00087 } RecStatUpdateFuncList;
00088
00089 struct RecStatMeta
00090 {
00091 RecRawStat data_raw;
00092 RecRawStatSyncCb sync_cb;
00093 RecRawStatBlock *sync_rsb;
00094 int sync_id;
00095 RecPersistT persist_type;
00096 };
00097
00098 struct RecConfigMeta
00099 {
00100 unsigned char update_required;
00101 RecConfigUpdateCbList *update_cb_list;
00102 void *update_cookie;
00103 RecUpdateT update_type;
00104 RecCheckT check_type;
00105 char *check_expr;
00106 RecAccessT access_type;
00107 };
00108
00109 struct RecRecord
00110 {
00111 RecT rec_type;
00112 const char *name;
00113 RecDataT data_type;
00114 RecData data;
00115 RecData data_default;
00116 RecMutex lock;
00117 unsigned char sync_required;
00118 uint32_t version;
00119 bool registered;
00120 union
00121 {
00122 RecStatMeta stat_meta;
00123 RecConfigMeta config_meta;
00124 };
00125 int order;
00126 int rsb_id;
00127 };
00128
00129
00130 struct RecRecords
00131 {
00132 int num_recs;
00133 RecRecord *recs;
00134 };
00135
00136
00137
00138
00139
00140 enum RecMessageT
00141 {
00142 RECG_NULL,
00143 RECG_SET,
00144 RECG_REGISTER,
00145 RECG_PUSH,
00146 RECG_PULL_REQ,
00147 RECG_PULL_ACK,
00148 RECG_RESET
00149 };
00150
00151 struct RecMessageHdr
00152 {
00153 RecMessageT msg_type;
00154 int o_start;
00155 int o_write;
00156 int o_end;
00157 int entries;
00158 int alignment;
00159 };
00160
00161 struct RecMessageEleHdr
00162 {
00163 unsigned int magic;
00164 int o_next;
00165 };
00166
00167 struct RecMessageItr
00168 {
00169 RecMessageEleHdr *ele_hdr;
00170 int next;
00171 };
00172
00173 typedef RecMessageHdr RecMessage;
00174
00175 typedef void (*RecDumpEntryCb) (RecT rec_type, void *edata, int registered, const char *name, int data_type, RecData *datum);
00176
00177 typedef int (*RecMessageRecvCb) (RecMessage * msg, RecMessageT msg_type, void *cookie);
00178
00179 #endif