Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/zbxtypes.h6
-rw-r--r--src/libs/zbxcommon/variant.c4
-rw-r--r--src/libs/zbxcommon/variant_misc.c2
-rw-r--r--src/libs/zbxdbcache/dbcache.c18
-rw-r--r--src/libs/zbxdbhigh/db.c4
-rw-r--r--src/libs/zbxdbhigh/host.c14
-rw-r--r--src/libs/zbxhistory/history.c2
-rw-r--r--src/libs/zbxhistory/history_elastic.c2
-rw-r--r--src/libs/zbxserver/evalfunc.c22
-rw-r--r--src/libs/zbxsysinfo/sysinfo.c2
-rw-r--r--src/zabbix_server/lld/lld_graph.c8
-rw-r--r--src/zabbix_server/poller/checks_calculated.c2
-rw-r--r--src/zabbix_server/trapper/trapper.c2
13 files changed, 47 insertions, 41 deletions
diff --git a/include/zbxtypes.h b/include/zbxtypes.h
index 73129c3ab89..f5b049a76a5 100644
--- a/include/zbxtypes.h
+++ b/include/zbxtypes.h
@@ -159,9 +159,9 @@ typedef off_t zbx_offset_t;
#endif /* _WINDOWS */
-#define ZBX_FS_ARG_LIST(m, a) m(a)
-#define ZBX_FS_DBL_EXT(p) "%." #p "g"
-#define ZBX_FS_DBL ZBX_FS_ARG_LIST(ZBX_FS_DBL_EXT, DECIMAL_DIG)
+#define ZBX_FS_DBL "%lf"
+#define ZBX_FS_DBL_EXT(p) "%." #p "lf"
+#define ZBX_FS_DBL64 "%.17g"
#define ZBX_PTR_SIZE sizeof(void *)
#define ZBX_FS_SIZE_T ZBX_FS_UI64
diff --git a/src/libs/zbxcommon/variant.c b/src/libs/zbxcommon/variant.c
index 8123e1a1bdd..c7ef4d5c7bf 100644
--- a/src/libs/zbxcommon/variant.c
+++ b/src/libs/zbxcommon/variant.c
@@ -219,7 +219,7 @@ static int variant_to_str(zbx_variant_t *value)
case ZBX_VARIANT_STR:
return SUCCEED;
case ZBX_VARIANT_DBL:
- value_str = zbx_dsprintf(NULL, ZBX_FS_DBL, value->data.dbl);
+ value_str = zbx_dsprintf(NULL, ZBX_FS_DBL64, value->data.dbl);
del_zeros(value_str);
break;
case ZBX_VARIANT_UI64:
@@ -294,7 +294,7 @@ const char *zbx_variant_value_desc(const zbx_variant_t *value)
switch (value->type)
{
case ZBX_VARIANT_DBL:
- zbx_snprintf(buffer, sizeof(buffer), ZBX_FS_DBL, value->data.dbl);
+ zbx_snprintf(buffer, sizeof(buffer), ZBX_FS_DBL64, value->data.dbl);
del_zeros(buffer);
return buffer;
case ZBX_VARIANT_UI64:
diff --git a/src/libs/zbxcommon/variant_misc.c b/src/libs/zbxcommon/variant_misc.c
index 0cd0cc0cd58..00b09413a24 100644
--- a/src/libs/zbxcommon/variant_misc.c
+++ b/src/libs/zbxcommon/variant_misc.c
@@ -48,7 +48,7 @@ int zbx_variant_to_value_type(zbx_variant_t *value, unsigned char value_type, in
{
if (FAIL == (ret = zbx_validate_value_dbl(value->data.dbl, dbl_precision)))
{
- *errmsg = zbx_dsprintf(NULL, "Value " ZBX_FS_DBL " is too small or too large.",
+ *errmsg = zbx_dsprintf(NULL, "Value " ZBX_FS_DBL64 " is too small or too large.",
value->data.dbl);
}
}
diff --git a/src/libs/zbxdbcache/dbcache.c b/src/libs/zbxdbcache/dbcache.c
index 3e76bfd45a2..368fde04932 100644
--- a/src/libs/zbxdbcache/dbcache.c
+++ b/src/libs/zbxdbcache/dbcache.c
@@ -493,10 +493,13 @@ static void dc_trends_update_float(ZBX_DC_TREND *trend, DB_ROW row, int num, siz
trend->value_max.dbl = value_max.dbl;
for (i = 0; i < num; i++)
- trend->value_avg.dbl += (value_avg.dbl - trend->value_avg.dbl) / ++(trend->num);
+ {
+ trend->num++;
+ trend->value_avg.dbl += value_avg.dbl / trend->num - trend->value_avg.dbl / trend->num;
+ }
zbx_snprintf_alloc(&sql, &sql_alloc, sql_offset, "update trends set"
- " num=%d,value_min=" ZBX_FS_DBL ",value_avg=" ZBX_FS_DBL ",value_max=" ZBX_FS_DBL
+ " num=%d,value_min=" ZBX_FS_DBL64 ",value_avg=" ZBX_FS_DBL64 ",value_max=" ZBX_FS_DBL64
" where itemid=" ZBX_FS_UI64 " and clock=%d;\n",
trend->num, trend->value_min.dbl, trend->value_avg.dbl, trend->value_max.dbl,
trend->itemid, trend->clock);
@@ -805,7 +808,8 @@ static void DCadd_trend(const ZBX_DC_HISTORY *history, ZBX_DC_TREND **trends, in
trend->value_min.dbl = history->value.dbl;
if (trend->num == 0 || history->value.dbl > trend->value_max.dbl)
trend->value_max.dbl = history->value.dbl;
- trend->value_avg.dbl += (history->value.dbl - trend->value_avg.dbl) / (trend->num + 1);
+ trend->value_avg.dbl += history->value.dbl / (trend->num + 1) -
+ trend->value_avg.dbl / (trend->num + 1);
break;
case ITEM_VALUE_TYPE_UINT64:
if (trend->num == 0 || history->value.ui64 < trend->value_min.ui64)
@@ -1602,7 +1606,7 @@ static void DCinventory_value_add(zbx_vector_ptr_t *inventory_values, const DC_I
switch (h->value_type)
{
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(value, sizeof(value), ZBX_FS_DBL, h->value.dbl);
+ zbx_snprintf(value, sizeof(value), ZBX_FS_DBL64, h->value.dbl);
break;
case ITEM_VALUE_TYPE_UINT64:
zbx_snprintf(value, sizeof(value), ZBX_FS_UI64, h->value.ui64);
@@ -1827,7 +1831,7 @@ static void normalize_item_value(const DC_ITEM *item, ZBX_DC_HISTORY *hdata)
case ITEM_VALUE_TYPE_FLOAT:
if (FAIL == zbx_validate_value_dbl(hdata->value.dbl, CONFIG_DOUBLE_PRECISION))
{
- dc_history_set_error(hdata, zbx_dsprintf(NULL, "Value " ZBX_FS_DBL
+ dc_history_set_error(hdata, zbx_dsprintf(NULL, "Value " ZBX_FS_DBL64
" is too small or too large.", hdata->value.dbl));
}
break;
@@ -2147,7 +2151,7 @@ static void dc_add_proxy_history(ZBX_DC_HISTORY *history, int history_num)
switch (h->value_type)
{
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(pvalue = buffer, sizeof(buffer), ZBX_FS_DBL, h->value.dbl);
+ zbx_snprintf(pvalue = buffer, sizeof(buffer), ZBX_FS_DBL64, h->value.dbl);
break;
case ITEM_VALUE_TYPE_UINT64:
zbx_snprintf(pvalue = buffer, sizeof(buffer), ZBX_FS_UI64, h->value.ui64);
@@ -2218,7 +2222,7 @@ static void dc_add_proxy_history_meta(ZBX_DC_HISTORY *history, int history_num)
switch (h->value_type)
{
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(pvalue = buffer, sizeof(buffer), ZBX_FS_DBL, h->value.dbl);
+ zbx_snprintf(pvalue = buffer, sizeof(buffer), ZBX_FS_DBL64, h->value.dbl);
break;
case ITEM_VALUE_TYPE_UINT64:
zbx_snprintf(pvalue = buffer, sizeof(buffer), ZBX_FS_UI64, h->value.ui64);
diff --git a/src/libs/zbxdbhigh/db.c b/src/libs/zbxdbhigh/db.c
index eec13ca6bd4..5797f03088f 100644
--- a/src/libs/zbxdbhigh/db.c
+++ b/src/libs/zbxdbhigh/db.c
@@ -2135,7 +2135,7 @@ static char *zbx_db_format_values(ZBX_FIELD **fields, const zbx_db_value_t *valu
zbx_snprintf_alloc(&str, &str_alloc, &str_offset, "'%s'", value->str);
break;
case ZBX_TYPE_FLOAT:
- zbx_snprintf_alloc(&str, &str_alloc, &str_offset, ZBX_FS_DBL, value->dbl);
+ zbx_snprintf_alloc(&str, &str_alloc, &str_offset, ZBX_FS_DBL64, value->dbl);
break;
case ZBX_TYPE_ID:
case ZBX_TYPE_UINT:
@@ -2604,7 +2604,7 @@ retry_oracle:
zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%d", value->i32);
break;
case ZBX_TYPE_FLOAT:
- zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, ZBX_FS_DBL, value->dbl);
+ zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, ZBX_FS_DBL64, value->dbl);
break;
case ZBX_TYPE_UINT:
zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, ZBX_FS_UI64,
diff --git a/src/libs/zbxdbhigh/host.c b/src/libs/zbxdbhigh/host.c
index 7ebb5875db1..695b518cd55 100644
--- a/src/libs/zbxdbhigh/host.c
+++ b/src/libs/zbxdbhigh/host.c
@@ -3844,16 +3844,16 @@ static void DBcopy_graph_to_host(zbx_uint64_t hostid, zbx_uint64_t graphid,
" set name='%s',"
"width=%d,"
"height=%d,"
- "yaxismin=" ZBX_FS_DBL ","
- "yaxismax=" ZBX_FS_DBL ","
+ "yaxismin=" ZBX_FS_DBL64 ","
+ "yaxismax=" ZBX_FS_DBL64 ","
"templateid=" ZBX_FS_UI64 ","
"show_work_period=%d,"
"show_triggers=%d,"
"graphtype=%d,"
"show_legend=%d,"
"show_3d=%d,"
- "percent_left=" ZBX_FS_DBL ","
- "percent_right=" ZBX_FS_DBL ","
+ "percent_left=" ZBX_FS_DBL64 ","
+ "percent_right=" ZBX_FS_DBL64 ","
"ymin_type=%d,"
"ymax_type=%d,"
"ymin_itemid=%s,"
@@ -3901,9 +3901,9 @@ static void DBcopy_graph_to_host(zbx_uint64_t hostid, zbx_uint64_t graphid,
"show_work_period,show_triggers,graphtype,show_legend,"
"show_3d,percent_left,percent_right,ymin_type,ymax_type,"
"ymin_itemid,ymax_itemid,flags)"
- " values (" ZBX_FS_UI64 ",'%s',%d,%d," ZBX_FS_DBL ","
- ZBX_FS_DBL "," ZBX_FS_UI64 ",%d,%d,%d,%d,%d," ZBX_FS_DBL ","
- ZBX_FS_DBL ",%d,%d,%s,%s,%d);\n",
+ " values (" ZBX_FS_UI64 ",'%s',%d,%d," ZBX_FS_DBL64 ","
+ ZBX_FS_DBL64 "," ZBX_FS_UI64 ",%d,%d,%d,%d,%d," ZBX_FS_DBL64 ","
+ ZBX_FS_DBL64 ",%d,%d,%s,%s,%d);\n",
hst_graphid, name_esc, width, height, yaxismin, yaxismax,
graphid, (int)show_work_period, (int)show_triggers,
(int)graphtype, (int)show_legend, (int)show_3d,
diff --git a/src/libs/zbxhistory/history.c b/src/libs/zbxhistory/history.c
index 92f8abdd035..d7b8196f564 100644
--- a/src/libs/zbxhistory/history.c
+++ b/src/libs/zbxhistory/history.c
@@ -276,7 +276,7 @@ void zbx_history_value2str(char *buffer, size_t size, const history_value_t *val
switch (value_type)
{
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(buffer, size, ZBX_FS_DBL, value->dbl);
+ zbx_snprintf(buffer, size, ZBX_FS_DBL64, value->dbl);
break;
case ITEM_VALUE_TYPE_UINT64:
zbx_snprintf(buffer, size, ZBX_FS_UI64, value->ui64);
diff --git a/src/libs/zbxhistory/history_elastic.c b/src/libs/zbxhistory/history_elastic.c
index 2b6fb5ad6f4..065a3706d62 100644
--- a/src/libs/zbxhistory/history_elastic.c
+++ b/src/libs/zbxhistory/history_elastic.c
@@ -128,7 +128,7 @@ static const char *history_value2str(const ZBX_DC_HISTORY *h)
case ITEM_VALUE_TYPE_LOG:
return h->value.log->value;
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(buffer, sizeof(buffer), ZBX_FS_DBL, h->value.dbl);
+ zbx_snprintf(buffer, sizeof(buffer), ZBX_FS_DBL64, h->value.dbl);
break;
case ITEM_VALUE_TYPE_UINT64:
zbx_snprintf(buffer, sizeof(buffer), ZBX_FS_UI64, h->value.ui64);
diff --git a/src/libs/zbxserver/evalfunc.c b/src/libs/zbxserver/evalfunc.c
index 7b934e3d65f..7b05cea182b 100644
--- a/src/libs/zbxserver/evalfunc.c
+++ b/src/libs/zbxserver/evalfunc.c
@@ -1045,19 +1045,21 @@ static int evaluate_AVG(char *value, DC_ITEM *item, const char *parameters, cons
if (0 < values.values_num)
{
- double sum = 0;
+ double avg = 0;
if (ITEM_VALUE_TYPE_FLOAT == item->value_type)
{
for (i = 0; i < values.values_num; i++)
- sum += values.values[i].value.dbl;
+ avg += values.values[i].value.dbl / (i + 1) - avg / (i + 1);
}
else
{
for (i = 0; i < values.values_num; i++)
- sum += values.values[i].value.ui64;
+ avg += values.values[i].value.ui64;
+
+ avg = avg / values.values_num;
}
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL, sum / values.values_num);
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64, avg);
ret = SUCCEED;
}
@@ -1738,7 +1740,7 @@ static int evaluate_ABSCHANGE(char *value, DC_ITEM *item, const zbx_timespec_t *
switch (item->value_type)
{
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL,
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64,
fabs(values.values[0].value.dbl - values.values[1].value.dbl));
break;
case ITEM_VALUE_TYPE_UINT64:
@@ -1813,7 +1815,7 @@ static int evaluate_CHANGE(char *value, DC_ITEM *item, const zbx_timespec_t *ts,
switch (item->value_type)
{
case ITEM_VALUE_TYPE_FLOAT:
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL,
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64,
values.values[0].value.dbl - values.values[1].value.dbl);
break;
case ITEM_VALUE_TYPE_UINT64:
@@ -2439,13 +2441,13 @@ static int evaluate_FORECAST(char *value, DC_ITEM *item, const char *parameters,
}
}
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL, zbx_forecast(t, x, values.values_num,
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64, zbx_forecast(t, x, values.values_num,
ts->sec - zero_time.sec - 1.0e-9 * (zero_time.ns + 1), time, fit, k, mode));
}
else
{
zabbix_log(LOG_LEVEL_DEBUG, "no data available");
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL, ZBX_MATH_ERROR);
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64, ZBX_MATH_ERROR);
}
ret = SUCCEED;
@@ -2593,13 +2595,13 @@ static int evaluate_TIMELEFT(char *value, DC_ITEM *item, const char *parameters,
}
}
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL, zbx_timeleft(t, x, values.values_num,
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64, zbx_timeleft(t, x, values.values_num,
ts->sec - zero_time.sec - 1.0e-9 * (zero_time.ns + 1), threshold, fit, k));
}
else
{
zabbix_log(LOG_LEVEL_DEBUG, "no data available");
- zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL, ZBX_MATH_ERROR);
+ zbx_snprintf(value, MAX_BUFFER_LEN, ZBX_FS_DBL64, ZBX_MATH_ERROR);
}
ret = SUCCEED;
diff --git a/src/libs/zbxsysinfo/sysinfo.c b/src/libs/zbxsysinfo/sysinfo.c
index b84056034e7..d8c146f1287 100644
--- a/src/libs/zbxsysinfo/sysinfo.c
+++ b/src/libs/zbxsysinfo/sysinfo.c
@@ -810,7 +810,7 @@ void test_parameter(const char *key)
printf(" [u|" ZBX_FS_UI64 "]", result.ui64);
if (0 != ISSET_DBL(&result))
- printf(" [d|" ZBX_FS_DBL "]", result.dbl);
+ printf(" [d|" ZBX_FS_DBL64 "]", result.dbl);
if (0 != ISSET_STR(&result))
printf(" [s|%s]", result.str);
diff --git a/src/zabbix_server/lld/lld_graph.c b/src/zabbix_server/lld/lld_graph.c
index 99926954387..41c0ee78fff 100644
--- a/src/zabbix_server/lld/lld_graph.c
+++ b/src/zabbix_server/lld/lld_graph.c
@@ -1051,14 +1051,14 @@ static int lld_graphs_save(zbx_uint64_t hostid, zbx_uint64_t parent_graphid, zbx
if (0 != (graph->flags & ZBX_FLAG_LLD_GRAPH_UPDATE_YAXISMIN))
{
- zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%syaxismin=" ZBX_FS_DBL, d,
+ zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%syaxismin=" ZBX_FS_DBL64, d,
yaxismin);
d = ",";
}
if (0 != (graph->flags & ZBX_FLAG_LLD_GRAPH_UPDATE_YAXISMAX))
{
- zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%syaxismax=" ZBX_FS_DBL, d,
+ zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%syaxismax=" ZBX_FS_DBL64, d,
yaxismax);
d = ",";
}
@@ -1099,14 +1099,14 @@ static int lld_graphs_save(zbx_uint64_t hostid, zbx_uint64_t parent_graphid, zbx
if (0 != (graph->flags & ZBX_FLAG_LLD_GRAPH_UPDATE_PERCENT_LEFT))
{
- zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%spercent_left=" ZBX_FS_DBL, d,
+ zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%spercent_left=" ZBX_FS_DBL64, d,
percent_left);
d = ",";
}
if (0 != (graph->flags & ZBX_FLAG_LLD_GRAPH_UPDATE_PERCENT_RIGHT))
{
- zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%spercent_right=" ZBX_FS_DBL, d,
+ zbx_snprintf_alloc(&sql, &sql_alloc, &sql_offset, "%spercent_right=" ZBX_FS_DBL64, d,
percent_right);
d = ",";
}
diff --git a/src/zabbix_server/poller/checks_calculated.c b/src/zabbix_server/poller/checks_calculated.c
index d637361761b..b3c6c8e1fa1 100644
--- a/src/zabbix_server/poller/checks_calculated.c
+++ b/src/zabbix_server/poller/checks_calculated.c
@@ -350,7 +350,7 @@ int get_value_calculated(DC_ITEM *dc_item, AGENT_RESULT *result)
if (ITEM_VALUE_TYPE_UINT64 == dc_item->value_type && 0 > value)
{
- SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Received value [" ZBX_FS_DBL "]"
+ SET_MSG_RESULT(result, zbx_dsprintf(NULL, "Received value [" ZBX_FS_DBL64 "]"
" is not suitable for value type [%s].",
value, zbx_item_value_type_string((zbx_item_value_type_t)dc_item->value_type)));
ret = NOTSUPPORTED;
diff --git a/src/zabbix_server/trapper/trapper.c b/src/zabbix_server/trapper/trapper.c
index 833446fa552..753805fd637 100644
--- a/src/zabbix_server/trapper/trapper.c
+++ b/src/zabbix_server/trapper/trapper.c
@@ -837,7 +837,7 @@ static void status_entry_export(struct zbx_json *json, const zbx_section_entry_t
zbx_json_adduint64(json, "count", counter_value.ui64);
break;
case ZBX_COUNTER_TYPE_DBL:
- tmp = zbx_dsprintf(tmp, ZBX_FS_DBL, counter_value.dbl);
+ tmp = zbx_dsprintf(tmp, ZBX_FS_DBL64, counter_value.dbl);
zbx_json_addstring(json, "count", tmp, ZBX_JSON_TYPE_STRING);
break;
default: