Add timer to add new stats
This commit is contained in:
@@ -15,6 +15,7 @@ package net.i2p.prometheus;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -38,6 +39,7 @@ import net.i2p.stat.Rate;
|
|||||||
import net.i2p.stat.RateStat;
|
import net.i2p.stat.RateStat;
|
||||||
import net.i2p.stat.StatManager;
|
import net.i2p.stat.StatManager;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
import net.i2p.util.SimpleTimer2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -47,7 +49,9 @@ public class PromManager implements ClientApp {
|
|||||||
private final I2PAppContext _context;
|
private final I2PAppContext _context;
|
||||||
private final Log _log;
|
private final Log _log;
|
||||||
private final ClientAppManager _mgr;
|
private final ClientAppManager _mgr;
|
||||||
|
private final Set<String> _registered;
|
||||||
private int i2pCount, jvmCount;
|
private int i2pCount, jvmCount;
|
||||||
|
private SimpleTimer2.TimedEvent _timer;
|
||||||
|
|
||||||
private ClientAppState _state = UNINITIALIZED;
|
private ClientAppState _state = UNINITIALIZED;
|
||||||
|
|
||||||
@@ -57,6 +61,7 @@ public class PromManager implements ClientApp {
|
|||||||
_context = ctx;
|
_context = ctx;
|
||||||
_log = ctx.logManager().getLog(PromManager.class);
|
_log = ctx.logManager().getLog(PromManager.class);
|
||||||
_mgr = mgr;
|
_mgr = mgr;
|
||||||
|
_registered = new HashSet<String>(256);
|
||||||
_state = INITIALIZED;
|
_state = INITIALIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,16 +77,18 @@ public class PromManager implements ClientApp {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This adds the rate and frequency stats present at plugin startup.
|
* This adds the rate and frequency stats present at plugin startup.
|
||||||
* TODO: add a monitor to add stats that appear later.
|
* Also run by the timer to add new stats later.
|
||||||
*/
|
*/
|
||||||
private void addStats() {
|
private void addStats() {
|
||||||
StatManager sm = _context.statManager();
|
StatManager sm = _context.statManager();
|
||||||
Map<String, SortedSet<String>> groups = sm.getStatsByGroup();
|
Map<String, SortedSet<String>> groups = sm.getStatsByGroup();
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
String pfx = "i2p.";
|
||||||
for (Map.Entry<String, SortedSet<String>> e : groups.entrySet()) {
|
for (Map.Entry<String, SortedSet<String>> e : groups.entrySet()) {
|
||||||
//String pfx = "i2p." + e.getKey() + '.';
|
//String pfx = "i2p." + e.getKey() + '.';
|
||||||
String pfx = "i2p.";
|
|
||||||
for (String s : e.getValue()) {
|
for (String s : e.getValue()) {
|
||||||
|
if (_registered.contains(s))
|
||||||
|
continue;
|
||||||
RateStat rs = sm.getRate(s);
|
RateStat rs = sm.getRate(s);
|
||||||
FrequencyStat fs = null;
|
FrequencyStat fs = null;
|
||||||
Rate rate = null;
|
Rate rate = null;
|
||||||
@@ -125,12 +132,15 @@ public class PromManager implements ClientApp {
|
|||||||
_log.debug("adding counter " + name);
|
_log.debug("adding counter " + name);
|
||||||
addFreq(fs, name, desc);
|
addFreq(fs, name, desc);
|
||||||
}
|
}
|
||||||
|
_registered.add(s);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i2pCount = n;
|
if (n > 0) {
|
||||||
if (_log.shouldDebug())
|
i2pCount += n;
|
||||||
_log.info(n + " PromManager I2P metrics registered");
|
if (_log.shouldDebug())
|
||||||
|
_log.info(n + " PromManager I2P metrics registered");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -215,6 +225,22 @@ public class PromManager implements ClientApp {
|
|||||||
.addLabelValues(value);
|
.addLabelValues(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Monitor to add stats that appear later.
|
||||||
|
*/
|
||||||
|
private class Adder extends SimpleTimer2.TimedEvent {
|
||||||
|
|
||||||
|
public Adder() {
|
||||||
|
super(_context.simpleTimer2());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void timeReached() {
|
||||||
|
addStats();
|
||||||
|
// TODO no way to remove stats, may be a small memory leak
|
||||||
|
schedule(30*60*1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/////// ClientApp methods
|
/////// ClientApp methods
|
||||||
|
|
||||||
@@ -233,6 +259,10 @@ public class PromManager implements ClientApp {
|
|||||||
addInfos();
|
addInfos();
|
||||||
changeState(RUNNING);
|
changeState(RUNNING);
|
||||||
_mgr.register(this);
|
_mgr.register(this);
|
||||||
|
_timer = new Adder();
|
||||||
|
// relatively soon to catch the stats we missed at startup.
|
||||||
|
// subsequent runs will be less frequent.
|
||||||
|
_timer.schedule(5*60*1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void shutdown(String[] args) {
|
public synchronized void shutdown(String[] args) {
|
||||||
@@ -240,6 +270,13 @@ public class PromManager implements ClientApp {
|
|||||||
if (_state == STOPPED)
|
if (_state == STOPPED)
|
||||||
return;
|
return;
|
||||||
changeState(STOPPING);
|
changeState(STOPPING);
|
||||||
|
if (_timer != null) {
|
||||||
|
_timer.cancel();
|
||||||
|
_timer = null;
|
||||||
|
}
|
||||||
|
_registered.clear();
|
||||||
|
i2pCount = 0;
|
||||||
|
jvmCount = 0;
|
||||||
// clear() supported as of v1.3.2
|
// clear() supported as of v1.3.2
|
||||||
PrometheusRegistry.defaultRegistry.clear();
|
PrometheusRegistry.defaultRegistry.clear();
|
||||||
_mgr.unregister(this);
|
_mgr.unregister(this);
|
||||||
|
Reference in New Issue
Block a user