@@ -36,23 +36,64 @@ export async function output () {
3636 * Create a counter
3737 * @param {string } name Counter name
3838 * @param {string } help Counter help
39- * @param {string } label Counter label
39+ * @param {string } label Counter label (for single label use)
40+ * @param {string[] } labelNames Array of label names for Prometheus labels
4041 */
41- export function createCounter ( name , help , label ) {
42+ export function createCounter ( name , help , label , labelNames ) {
4243 if ( ! enabled ) {
4344 return false
4445 }
45- counters [ `${ name } /${ label || '' } ` ] = new PromClient . Counter ( { name, help } )
46+ const key = `${ name } /${ label || '' } `
47+ if ( labelNames && labelNames . length > 0 ) {
48+ counters [ key ] = new PromClient . Counter ( { name, help, labelNames } )
49+ } else if ( label && label . length > 0 ) {
50+ // Support for single label
51+ counters [ key ] = new PromClient . Counter ( { name, help, labelNames : [ label ] } )
52+ } else {
53+ counters [ key ] = new PromClient . Counter ( { name, help } )
54+ }
4655}
4756
4857/**
4958 * Increments counter
5059 * @param {string } name Counter name
51- * @param {string } label Counter label
60+ * @param {string } label Counter label value (for single label counters)
5261 */
5362export function counterInc ( name , label ) {
5463 if ( ! enabled ) {
5564 return false
5665 }
57- counters [ `${ name } /${ label || '' } ` ] . inc ( )
66+
67+ // First, try to find a counter with no label (old style)
68+ let key = `${ name } /`
69+ let counter = counters [ key ]
70+
71+ if ( ! counter ) {
72+ // Look for counters with single labels
73+ for ( const counterKey in counters ) {
74+ if ( counterKey . startsWith ( `${ name } /` ) && counterKey !== `${ name } /` ) {
75+ counter = counters [ counterKey ]
76+ key = counterKey
77+ break
78+ }
79+ }
80+ }
81+
82+ if ( ! counter ) {
83+ return false
84+ }
85+
86+ if ( label && label . length > 0 ) {
87+ // Support for single label value
88+ const labelName = key . split ( '/' ) [ 1 ] // Extract label name from key
89+ if ( labelName ) {
90+ const labelObject = { }
91+ labelObject [ labelName ] = label
92+ counter . inc ( labelObject )
93+ } else {
94+ counter . inc ( )
95+ }
96+ } else {
97+ counter . inc ( )
98+ }
5899}
0 commit comments