@cryptotaxi247 / netdata-1 / commits / 8f20f6278

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)