Fix Charts (windows.plugin) (#20815)
thiagoftsm committed
Aug 13, 2025 at 14:50 UTC
8f20f6278058708a7b83b87512fd28f1dc8d2982
2 files changed
+36
-22
src/collectors/windows.plugin/metadata.yaml
+9
-3
@@ -2070,16 +2070,22 @@ modules:
2070
- name: memory
2071
- name: mssql.database_readonly
2072
description: Current database write status.
2073
- unit: boolean
2073
+ unit: status
2074
chart_type: line
2075
dimensions:
2076
+ - name: writable
2077
- name: readonly
2078
- name: mssql.database_state
2079
description: Current database state.
2079
- unit: boolean
2080
+ unit: status
2081
chart_type: line
2082
dimensions:
2082
- - name: state
2083
+ - name: online
2084
+ - name: restoring
2085
+ - name: recovering
2086
+ - name: recovering_pending
2087
+ - name: suspect
2088
+ - name: offline
2089
- name: mssql.instance_memmgr_connection_memory_bytes
2090
description: Amount of dynamic memory to maintain connections
2091
unit: bytes
src/collectors/windows.plugin/perflib-mssql.c
+27
-19
@@ -179,7 +179,7 @@ struct mssql_db_instance {
179
RRDSET *st_db_lockwait;
180
RRDSET *st_db_deadlock;
181
RRDSET *st_db_readonly;
182
- RRDSET *st_db_state[NETDATA_DB_STATES];
182
+ RRDSET *st_db_state;
183
RRDSET *st_lock_timeouts;
184
RRDSET *st_lock_requests;
185
RRDSET *st_buff_page_iops;
@@ -201,7 +201,8 @@ struct mssql_db_instance {
201
RRDDIM *rd_db_write_transactions;
202
RRDDIM *rd_db_lockwait;
203
RRDDIM *rd_db_deadlock;
204
- RRDDIM *rd_db_readonly;
204
+ RRDDIM *rd_db_readonly_yes;
205
+ RRDDIM *rd_db_readonly_no;
206
RRDDIM *rd_db_state[NETDATA_DB_STATES];
207
RRDDIM *rd_lock_timeouts;
208
RRDDIM *rd_lock_requests;
@@ -2448,7 +2449,7 @@ static void mssql_is_readonly_chart(struct mssql_db_instance *mdi, const char *d
2449
"locks",
2450
"mssql.database_readonly",
2451
"Current database write status.",
2451
- "boolean",
2452
+ "status",
2453
PLUGIN_WINDOWS_NAME,
2454
"PerflibMSSQL",
2455
PRIO_MSSQL_DATABASE_DEADLOCKS_PER_SECOND,
@@ -2458,53 +2459,60 @@ static void mssql_is_readonly_chart(struct mssql_db_instance *mdi, const char *d
2459
rrdlabels_add(mdi->st_db_readonly->rrdlabels, "mssql_instance", mdi->parent->instanceID, RRDLABEL_SRC_AUTO);
2460
rrdlabels_add(mdi->st_db_readonly->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
2461
2461
- mdi->rd_db_readonly = rrddim_add(mdi->st_db_readonly, "readonly", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2462
+ mdi->rd_db_readonly_yes = rrddim_add(mdi->st_db_readonly, "writable", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2463
+ mdi->rd_db_readonly_no = rrddim_add(mdi->st_db_readonly, "readonly", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2464
}
2465
2466
rrddim_set_by_pointer(
2465
- mdi->st_db_readonly, mdi->rd_db_readonly, (collected_number)mdi->MSSQLDBIsReadonly.current.Data);
2467
+ mdi->st_db_readonly, mdi->rd_db_readonly_no, (collected_number)mdi->MSSQLDBIsReadonly.current.Data);
2468
+
2469
+ collected_number opposite = (mdi->MSSQLDBIsReadonly.current.Data) ? 0 : 1;
2470
+ rrddim_set_by_pointer(
2471
+ mdi->st_db_readonly, mdi->rd_db_readonly_yes, (collected_number)opposite);
2472
2473
rrdset_done(mdi->st_db_readonly);
2474
}
2475
2470
-static void mssql_db_states_chart(struct mssql_db_instance *mdi, const char *db, int update_every, const char *str_state, int idx, collected_number state)
2476
+static void mssql_db_states_chart(struct mssql_db_instance *mdi, const char *db, int update_every)
2477
{
2472
- if (!mdi->st_db_state[idx]) {
2478
+ if (!mdi->st_db_state) {
2479
char id[RRD_ID_LENGTH_MAX + 1];
2474
- snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_resource_%s_state", db, mdi->parent->instanceID, str_state);
2480
+ snprintfz(id, RRD_ID_LENGTH_MAX, "db_%s_instance_%s_state", db, mdi->parent->instanceID);
2481
netdata_fix_chart_name(id);
2476
- mdi->st_db_state[idx] = rrdset_create_localhost(
2482
+ mdi->st_db_state = rrdset_create_localhost(
2483
"mssql",
2484
id,
2485
NULL,
2486
"locks",
2487
"mssql.database_state",
2488
"Current database state.",
2483
- "boolean",
2489
+ "status",
2490
PLUGIN_WINDOWS_NAME,
2491
"PerflibMSSQL",
2492
PRIO_MSSQL_DATABASE_DEADLOCKS_PER_SECOND,
2493
update_every,
2494
RRDSET_TYPE_LINE);
2495
2490
- rrdlabels_add(mdi->st_db_state[idx]->rrdlabels, "mssql_instance", mdi->parent->instanceID, RRDLABEL_SRC_AUTO);
2491
- rrdlabels_add(mdi->st_db_state[idx]->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
2496
+ rrdlabels_add(mdi->st_db_state->rrdlabels, "mssql_instance", mdi->parent->instanceID, RRDLABEL_SRC_AUTO);
2497
+ rrdlabels_add(mdi->st_db_state->rrdlabels, "database", db, RRDLABEL_SRC_AUTO);
2498
2493
- mdi->rd_db_state[idx] = rrddim_add(mdi->st_db_state[idx], "state", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2499
+ mdi->rd_db_state[0] = rrddim_add(mdi->st_db_state, "online", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2500
+ mdi->rd_db_state[1] = rrddim_add(mdi->st_db_state, "restoring", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2501
+ mdi->rd_db_state[2] = rrddim_add(mdi->st_db_state, "recovering", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2502
+ mdi->rd_db_state[3] = rrddim_add(mdi->st_db_state, "recovering_pending", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2503
+ mdi->rd_db_state[4] = rrddim_add(mdi->st_db_state, "suspect", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2504
+ mdi->rd_db_state[5] = rrddim_add(mdi->st_db_state, "offline", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2505
}
2495
-
2496
- rrddim_set_by_pointer(mdi->st_db_state[idx], mdi->rd_db_state[idx], state);
2497
-
2498
- rrdset_done(mdi->st_db_state[idx]);
2506
}
2507
2508
static void mssql_db_state_chart_loop(struct mssql_db_instance *mdi, const char *db, int update_every)
2509
{
2503
- static const char *state[NETDATA_DB_STATES] = { "ONLINE", "RESTORING", "RECOVERING", "RECOVERY_PENDING", "SUSPECT", "OFFLINE"};
2510
collected_number set_value = (mdi->MSSQLDBState.current.Data < 5) ? (collected_number) mdi->MSSQLDBState.current.Data : 5;
2511
+ mssql_db_states_chart(mdi, db, update_every);
2512
for (collected_number i; i < NETDATA_DB_STATES; i++) {
2506
- mssql_db_states_chart(mdi, db, update_every, state[i], i, i == set_value);
2513
+ rrddim_set_by_pointer(mdi->st_db_state, mdi->rd_db_state[i], i == set_value);
2514
}
2515
+ rrdset_done(mdi->st_db_state);
2516
}
2517
2518
static void mssql_lock_request_chart(struct mssql_db_instance *mdi, const char *db, int update_every)