2
2
* Denki (電気, Japanese for 'electricity'), PMDA for electricity related
3
3
* metrics
4
4
*
5
- * Copyright (c) 2012-2014,2017,2021-2024 Red Hat.
5
+ * Copyright (c) 2012-2014,2017,2021-2025 Red Hat.
6
6
* Copyright (c) 1995,2004 Silicon Graphics, Inc. All Rights Reserved.
7
7
*
8
8
* This program is free software; you can redistribute it and/or modify it
@@ -842,8 +842,8 @@ static int read_batteries(void) {
842
842
/*
843
843
* Denki PMDA metrics
844
844
*
845
- * denki.raplsysfs - energy counter from RAPL, read from sysfs
846
- * denki.raplmsr - energy counter from RAPL, read from msr registers
845
+ * denki.rapl.sysfs - energy counter from RAPL, read from sysfs
846
+ * denki.rapl.msr - energy counter from RAPL, read from msr registers
847
847
* denki.bat.energy_now - <battery>/energy_now raw reading,
848
848
* current battery charge in Wh
849
849
* denki.bat.power_now - <battery>/power_now raw reading
@@ -858,49 +858,49 @@ static int read_batteries(void) {
858
858
*/
859
859
860
860
static pmdaIndom indomtab [] = {
861
- #define RAPL_SYSFS_INDOM 0 /* serial number for RAPL sysfs instance domain */
861
+ #define RAPL_SYSFS_INDOM 0 /* serial number for rapl. sysfs instance domain */
862
862
{ RAPL_SYSFS_INDOM , 0 , NULL },
863
- #define RAPL_MSR_INDOM 1 /* serial number for RAPL msr instance domain */
863
+ #define RAPL_MSR_INDOM 1 /* serial number for rapl. msr instance domain */
864
864
{ RAPL_MSR_INDOM , 0 , NULL },
865
- #define ENERGYNOW_INDOM 2 /* serial number for energy_now instance domain */
866
- { ENERGYNOW_INDOM , 0 , NULL },
867
- #define POWERNOW_INDOM 3 /* serial number for power_now instance domain */
868
- { POWERNOW_INDOM , 0 , NULL },
869
- #define CAPACITY_INDOM 4 /* serial number for capacity instance domain */
870
- { CAPACITY_INDOM , 0 , NULL }
865
+ #define BAT_ENERGYNOW_INDOM 2 /* serial number for bat. energy_now instance domain */
866
+ { BAT_ENERGYNOW_INDOM , 0 , NULL },
867
+ #define BAT_POWERNOW_INDOM 3 /* serial number for bat. power_now instance domain */
868
+ { BAT_POWERNOW_INDOM , 0 , NULL },
869
+ #define BAT_CAPACITY_INDOM 4 /* serial number for bat. capacity instance domain */
870
+ { BAT_CAPACITY_INDOM , 0 , NULL }
871
871
};
872
872
873
873
/* this is merely a convenience */
874
874
static pmInDom * rapl_sysfs_indom = & indomtab [RAPL_SYSFS_INDOM ].it_indom ;
875
875
static pmInDom * rapl_msr_indom = & indomtab [RAPL_MSR_INDOM ].it_indom ;
876
- static pmInDom * energynow_indom = & indomtab [ENERGYNOW_INDOM ].it_indom ;
877
- static pmInDom * powernow_indom = & indomtab [POWERNOW_INDOM ].it_indom ;
878
- static pmInDom * capacity_indom = & indomtab [CAPACITY_INDOM ].it_indom ;
876
+ static pmInDom * bat_energynow_indom = & indomtab [BAT_ENERGYNOW_INDOM ].it_indom ;
877
+ static pmInDom * bat_powernow_indom = & indomtab [BAT_POWERNOW_INDOM ].it_indom ;
878
+ static pmInDom * bat_capacity_indom = & indomtab [BAT_CAPACITY_INDOM ].it_indom ;
879
879
880
880
/*
881
881
* All metrics supported in this PMDA - one table entry for each.
882
882
*/
883
883
884
884
static pmdaMetric metrictab [] = {
885
- /* rapl sysfs */
885
+ /* rapl. sysfs */
886
886
{ NULL ,
887
887
{ PMDA_PMID (0 ,0 ), PM_TYPE_U64 , RAPL_SYSFS_INDOM , PM_SEM_COUNTER ,
888
888
PMDA_PMUNITS (0 ,0 ,0 ,0 ,0 ,0 ) }, },
889
- /* rapl msr */
889
+ /* rapl. msr */
890
890
{ NULL ,
891
- { PMDA_PMID (1 , 0 ), PM_TYPE_U64 , RAPL_MSR_INDOM , PM_SEM_COUNTER ,
891
+ { PMDA_PMID (0 , 1 ), PM_TYPE_U64 , RAPL_MSR_INDOM , PM_SEM_COUNTER ,
892
892
PMDA_PMUNITS (0 ,0 ,0 ,0 ,0 ,0 ) }, },
893
893
/* bat.energy_now */
894
894
{ NULL ,
895
- { PMDA_PMID (2 ,0 ), PM_TYPE_DOUBLE , ENERGYNOW_INDOM , PM_SEM_INSTANT ,
895
+ { PMDA_PMID (1 ,0 ), PM_TYPE_DOUBLE , BAT_ENERGYNOW_INDOM , PM_SEM_INSTANT ,
896
896
PMDA_PMUNITS (0 ,0 ,0 ,0 ,0 ,0 ) }, },
897
897
/* bat.power_now */
898
898
{ NULL ,
899
- { PMDA_PMID (2 ,1 ), PM_TYPE_DOUBLE , POWERNOW_INDOM , PM_SEM_INSTANT ,
899
+ { PMDA_PMID (1 ,1 ), PM_TYPE_DOUBLE , BAT_POWERNOW_INDOM , PM_SEM_INSTANT ,
900
900
PMDA_PMUNITS (0 ,0 ,0 ,0 ,0 ,0 ) }, },
901
901
/* bat.capacity */
902
902
{ NULL ,
903
- { PMDA_PMID (2 ,2 ), PM_TYPE_32 , CAPACITY_INDOM , PM_SEM_INSTANT ,
903
+ { PMDA_PMID (1 ,2 ), PM_TYPE_32 , BAT_CAPACITY_INDOM , PM_SEM_INSTANT ,
904
904
PMDA_PMUNITS (0 ,0 ,0 ,0 ,0 ,0 ) }, }
905
905
};
906
906
@@ -972,21 +972,15 @@ denki_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
972
972
973
973
if (cluster == 0 ) {
974
974
switch (item ) {
975
- case 0 : /* rapl sysfs */
975
+ case 0 : /* rapl. sysfs */
976
976
if ((sts = pmdaCacheLookup (* rapl_sysfs_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
977
977
if (sts < 0 )
978
978
pmNotifyErr (LOG_ERR , "pmdaCacheLookup failed: inst=%d: %s" , inst , pmErrStr (sts ));
979
979
return PM_ERR_INST ;
980
980
}
981
981
atom -> ull = lookup_rapl_dom (inst )/1000000 ;
982
982
break ;
983
- default :
984
- return PM_ERR_PMID ;
985
- }
986
- }
987
- else if (cluster == 1 ) {
988
- switch (item ) {
989
- case 0 : /* rapl msr */
983
+ case 1 : /* rapl.msr */
990
984
if ((sts = pmdaCacheLookup (* rapl_msr_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
991
985
if (sts < 0 )
992
986
pmNotifyErr (LOG_ERR , "pmdaCacheLookup failed: inst=%d: %s" , inst , pmErrStr (sts ));
@@ -1013,26 +1007,26 @@ denki_fetchCallBack(pmdaMetric *mdesc, unsigned int inst, pmAtomValue *atom)
1013
1007
return PM_ERR_PMID ;
1014
1008
}
1015
1009
}
1016
- else if (cluster == 2 ) {
1010
+ else if (cluster == 1 ) {
1017
1011
switch (item ) {
1018
1012
case 0 : /* denki.bat.energy_now */
1019
- if ((sts = pmdaCacheLookup (* energynow_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
1013
+ if ((sts = pmdaCacheLookup (* bat_energynow_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
1020
1014
if (sts < 0 )
1021
1015
pmNotifyErr (LOG_ERR , "pmdaCacheLookup failed: inst=%d: %s" , inst , pmErrStr (sts ));
1022
1016
return PM_ERR_INST ;
1023
1017
}
1024
1018
atom -> d = energy_now [inst ]/energy_convert_factor [inst ];
1025
1019
break ;
1026
1020
case 1 : /* denki.bat.power_now */
1027
- if ((sts = pmdaCacheLookup (* powernow_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
1021
+ if ((sts = pmdaCacheLookup (* bat_powernow_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
1028
1022
if (sts < 0 )
1029
1023
pmNotifyErr (LOG_ERR , "pmdaCacheLookup failed: inst=%d: %s" , inst , pmErrStr (sts ));
1030
1024
return PM_ERR_INST ;
1031
1025
}
1032
1026
atom -> d = power_now [inst ]/1000000.0 ;
1033
1027
break ;
1034
1028
case 2 : /* denki.bat.capacity */
1035
- if ((sts = pmdaCacheLookup (* capacity_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
1029
+ if ((sts = pmdaCacheLookup (* bat_capacity_indom , inst , NULL , NULL )) != PMDA_CACHE_ACTIVE ) {
1036
1030
if (sts < 0 )
1037
1031
pmNotifyErr (LOG_ERR , "pmdaCacheLookup failed: inst=%d: %s" , inst , pmErrStr (sts ));
1038
1032
return PM_ERR_INST ;
@@ -1244,21 +1238,21 @@ denki_bat_init(void)
1244
1238
pmsprintf (tmp ,sizeof (tmp ),"battery-%d" ,battery );
1245
1239
1246
1240
/* bat.energy_now */
1247
- sts = pmdaCacheStore (* energynow_indom , PMDA_CACHE_ADD , tmp , NULL );
1241
+ sts = pmdaCacheStore (* bat_energynow_indom , PMDA_CACHE_ADD , tmp , NULL );
1248
1242
if (sts < 0 ) {
1249
1243
pmNotifyErr (LOG_ERR , "pmdaCacheStore failed: %s" , pmErrStr (sts ));
1250
1244
return ;
1251
1245
}
1252
1246
1253
1247
/* bat.power_now */
1254
- sts = pmdaCacheStore (* powernow_indom , PMDA_CACHE_ADD , tmp , NULL );
1248
+ sts = pmdaCacheStore (* bat_powernow_indom , PMDA_CACHE_ADD , tmp , NULL );
1255
1249
if (sts < 0 ) {
1256
1250
pmNotifyErr (LOG_ERR , "pmdaCacheStore failed: %s" , pmErrStr (sts ));
1257
1251
return ;
1258
1252
}
1259
1253
1260
1254
/* bat.capacity */
1261
- sts = pmdaCacheStore (* capacity_indom , PMDA_CACHE_ADD , tmp , NULL );
1255
+ sts = pmdaCacheStore (* bat_capacity_indom , PMDA_CACHE_ADD , tmp , NULL );
1262
1256
if (sts < 0 ) {
1263
1257
pmNotifyErr (LOG_ERR , "pmdaCacheStore failed: %s" , pmErrStr (sts ));
1264
1258
return ;
@@ -1282,13 +1276,13 @@ denki_label(int ident, int type, pmLabelSet **lpp, pmdaExt *pmda)
1282
1276
case RAPL_MSR_INDOM :
1283
1277
pmdaAddLabels (lpp , "{\"indom_name\":\"raplmsr\"}" );
1284
1278
break ;
1285
- case ENERGYNOW_INDOM :
1279
+ case BAT_ENERGYNOW_INDOM :
1286
1280
pmdaAddLabels (lpp , "{\"units\":\"watt hours\"}" );
1287
1281
break ;
1288
- case POWERNOW_INDOM :
1282
+ case BAT_POWERNOW_INDOM :
1289
1283
pmdaAddLabels (lpp , "{\"units\":\"watt\"}" );
1290
1284
break ;
1291
- case CAPACITY_INDOM :
1285
+ case BAT_CAPACITY_INDOM :
1292
1286
pmdaAddLabels (lpp , "{\"units\":\"percent\"}" );
1293
1287
break ;
1294
1288
}
@@ -1310,26 +1304,26 @@ __PMDA_INIT_CALL
1310
1304
denki_init (pmdaInterface * dp )
1311
1305
{
1312
1306
if (isDSO ) {
1313
- int sep = pmPathSeparator ();
1314
-
1315
- if (strcmp (rootpath , "/" ) == 0 ) {
1316
- /*
1317
- * no -r ROOTPATH on the command line ... check for
1318
- * DENKI_SYSPATH in the environment
1319
- */
1320
- char * envpath = getenv ("DENKI_SYSPATH" );
1321
- if (envpath )
1322
- pmsprintf (rootpath , sizeof (rootpath ), "%s" , envpath );
1323
- }
1324
- pmsprintf (mypath , sizeof (mypath ), "%s%c" "denki" "%c" "help" ,
1325
- pmGetConfig ("PCP_PMDAS_DIR" ), sep , sep );
1326
- pmdaDSO (dp , PMDA_INTERFACE_7 , "denki DSO" , mypath );
1307
+ int sep = pmPathSeparator ();
1308
+
1309
+ if (strcmp (rootpath , "/" ) == 0 ) {
1310
+ /*
1311
+ * no -r ROOTPATH on the command line ... check for
1312
+ * DENKI_SYSPATH in the environment
1313
+ */
1314
+ char * envpath = getenv ("DENKI_SYSPATH" );
1315
+ if (envpath )
1316
+ pmsprintf (rootpath , sizeof (rootpath ), "%s" , envpath );
1317
+ }
1318
+ pmsprintf (mypath , sizeof (mypath ), "%s%c" "denki" "%c" "help" ,
1319
+ pmGetConfig ("PCP_PMDAS_DIR" ), sep , sep );
1320
+ pmdaDSO (dp , PMDA_INTERFACE_7 , "denki DSO" , mypath );
1327
1321
} else {
1328
- pmSetProcessIdentity (username );
1322
+ pmSetProcessIdentity (username );
1329
1323
}
1330
1324
1331
1325
if (dp -> status != 0 )
1332
- return ;
1326
+ return ;
1333
1327
1334
1328
dp -> version .any .fetch = denki_fetch ;
1335
1329
dp -> version .any .instance = denki_instance ;
0 commit comments