[go: up one dir, main page]

Menu

[f3b279]: / mfscommon / charts.h  Maximize  Restore  History

Download this file

150 lines (127 with data), 5.3 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
* Copyright (C) 2025 Jakub Kruszona-Zawadzki, Saglabs SA
*
* This file is part of MooseFS.
*
* MooseFS is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2 (only).
*
* MooseFS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MooseFS; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA
* or visit http://www.gnu.org/licenses/gpl-2.0.html
*/
#ifndef _CHARTS_H_
#define _CHARTS_H_
#include <stdio.h>
#include <inttypes.h>
#define CHARTS_MODE_ADD 0
#define CHARTS_MODE_MAX 1
#define CHARTS_SCALE_MICRO 0
#define CHARTS_SCALE_MILI 1
#define CHARTS_SCALE_NONE 2
#define CHARTS_SCALE_KILO 3
#define CHARTS_SCALE_MEGA 4
#define CHARTS_SCALE_GIGA 5
#define CHARTS_OP_CONST 1000
#define CHARTS_OP_ADD 1001
#define CHARTS_OP_SUB 1002
#define CHARTS_OP_MIN 1003
#define CHARTS_OP_MAX 1004
#define CHARTS_OP_MUL 1005
#define CHARTS_OP_DIV 1006
#define CHARTS_OP_NEG 1007
#define CHARTS_OP_END 1999
#define CHARTS_DEFS_END 2000
#define CHARTS_CONST(x) CHARTS_OP_CONST, x
#define CHARTS_ADD(x,y) x, y, CHARTS_OP_ADD
#define CHARTS_SUB(x,y) x, y, CHARTS_OP_SUB
#define CHARTS_MIN(x,y) x, y, CHARTS_OP_MIN
#define CHARTS_MAX(x,y) x, y, CHARTS_OP_MAX
#define CHARTS_MUL(x,y) x, y, CHARTS_OP_MUL
#define CHARTS_DIV(x,y) x, y, CHARTS_OP_DIV
#define CHARTS_NEG(x) x, CHARTS_OP_NEG
#define CHARTS_CALCDEF(x) x, CHARTS_OP_END
#define CHARTS_NONE 0
#define CHARTS_DIRECT_START 1
#define CHARTS_DIRECT(x) ((x)+CHARTS_DIRECT_START)
#define CHARTS_CALC_START 1000
#define CHARTS_CALC(x) ((x)+CHARTS_CALC_START)
#if defined(UINT64_C)
# define CHARTS_NODATA UINT64_C(0xFFFFFFFFFFFFFFFF)
#elif defined(UINT64_MAX)
# define CHARTS_NODATA UINT64_MAX
#else
# define CHARTS_NODATA 0xFFFFFFFFFFFFFFFFULL
#endif
typedef struct _statdef {
char *name;
uint32_t statid;
uint8_t mode;
uint8_t percent;
uint8_t scale;
uint16_t multiplier;
uint16_t divisor;
} statdef;
typedef struct _estatdef {
char *name;
uint32_t statid;
uint32_t c1src;
uint32_t c2src;
uint32_t c3src;
uint8_t mode;
uint8_t percent;
uint8_t scale;
uint16_t multiplier;
uint16_t divisor;
} estatdef;
#if 0
// definition examples:
// simple data charts (source data counters, represented by one color simple charts):
/* name , join mode , percent , scale , multiplier , divisor */
#define STATDEFS { \
{"cpu_time_counter" ,CHARTS_MODE_ADD,1,CHARTS_SCALE_MICRO, 100,60}, \
{"network_data_in_bits_per_second" ,CHARTS_MODE_ADD,0,CHARTS_SCALE_MILI ,8000,60}, \
{"count_per_second" ,CHARTS_MODE_ADD,0,CHARTS_SCALE_MILI ,1000,60}, \
{"count_per_minute" ,CHARTS_MODE_ADD,0,CHARTS_SCALE_NONE , 1, 1}, \
{"micro_time_per_second" ,CHARTS_MODE_ADD,0,CHARTS_SCALE_MICRO, 1,60}, \
{NULL ,0 ,0,0 , 0, 0} \
};
#define CALCDEFS { \
CHARTS_CALCDEF(CHARTS_ADD(CHARTS_TOADD1,CHARTS_TOADD2)), \
CHARTS_CALCDEF(CHARTS_ADD(CHARTS_TOADD1,CHARTS_ADD(CHARTS_TOADD2,CHARTS_TOADD3))), \
CHARTS_CALCDEF(CHARTS_DIV(CHARTS_TODIVIDE,CHARTS_DIVISOR)), \
CHARTS_CALCDEF(CHARTS_ADD(CHARTS_TOADD,CHARTS_MUL(CHARTS_CONST(300),CHARTS_TOADDMULTIPLIED))), \
CHARTS_DEFS_END \
};
// enhanced data charts (up to 3 counters on one chart represented by three colors)
// c1_def - light
// c2_def - medium
// c3_def - dark
// source data for given color can be defined as simple chart or calculation from above definitions
/* c1_def , c2_def , c3_def , join mode , percent , scale , multiplier , divisor */
#define ESTATDEFS { \
{CHARTS_DIRECT(CHARTS_UCPU) ,CHARTS_DIRECT(CHARTS_SCPU) ,CHARTS_NONE ,CHARTS_MODE_ADD,1,CHARTS_SCALE_MICRO, 100,60}, \
{CHARTS_CALC(0) ,CHARTS_DIRECT(CHARTS_SOMETHING) ,CHARTS_CALC(1) ,CHARTS_MODE_ADD,0,CHARTS_SCALE_NONE , 1, 1}, \
{CHARTS_NONE ,CHARTS_CALC(1) ,CHARTS_NONE ,CHARTS_MODE_ADD,0,CHARTS_SCALE_MILI ,1000,60}, \
{CHARTS_NONE ,CHARTS_NONE ,CHARTS_NONE ,0 ,0,0 , 0, 0} \
};
#endif
uint64_t charts_get (uint32_t chartnumber,uint32_t count);
uint32_t charts_monotonic_data (uint8_t *buff);
uint32_t charts_getmaxleng(void);
void charts_getdata(double *data,uint32_t *timestamp,uint32_t *rsec,uint32_t number);
uint32_t charts_makedata(uint8_t *buff,uint32_t number,uint32_t maxentries,uint8_t multimode);
uint32_t charts_make_png(uint32_t chartid,uint32_t chartwidth,uint32_t chartheight);
void charts_get_png(uint8_t *buff);
void charts_add (uint64_t *data,uint32_t datats);
void charts_store (void);
int charts_init (const uint32_t *calcs,const statdef *stats,const estatdef *estats,const char *filename,uint8_t mode);
void charts_term (void);
#endif