MCPcopy
hub / github.com/OpenTSDB/opentsdb / LogsRpc

Class LogsRpc

src/tsd/LogsRpc.java:35–138  ·  view source on GitHub ↗

The "/logs" endpoint.

Source from the content-addressed store, hash-verified

33
34/** The "/logs" endpoint. */
35final class LogsRpc implements HttpRpc {
36
37 public void execute(final TSDB tsdb, final HttpQuery query)
38 throws JsonGenerationException, IOException {
39 LogIterator logmsgs = new LogIterator();
40 if (query.hasQueryStringParam("json")) {
41 ArrayList<String> logs = new ArrayList<String>();
42 for (String log : logmsgs) {
43 logs.add(log);
44 }
45 query.sendReply(JSON.serializeToBytes(logs));
46 } else if (query.hasQueryStringParam("level")) {
47 final Level level = Level.toLevel(query.getQueryStringParam("level"),
48 null);
49 if (level == null) {
50 throw new BadRequestException("Invalid level: "
51 + query.getQueryStringParam("level"));
52 }
53 final Logger root =
54 (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
55 String logger_name = query.getQueryStringParam("logger");
56 if (logger_name == null) {
57 logger_name = Logger.ROOT_LOGGER_NAME;
58 } else if (root.getLoggerContext().exists(logger_name) == null) {
59 throw new BadRequestException("Invalid logger: " + logger_name);
60 }
61 final Logger logger = (Logger) LoggerFactory.getLogger(logger_name);
62 int nloggers = 0;
63 if (logger == root) { // Update all the loggers.
64 for (final Logger l : logger.getLoggerContext().getLoggerList()) {
65 l.setLevel(level);
66 nloggers++;
67 }
68 } else {
69 logger.setLevel(level);
70 nloggers++;
71 }
72 query.sendReply("Set the log level to " + level + " on " + nloggers
73 + " logger" + (nloggers > 1 ? "s" : "") + ".\n");
74 } else {
75 final StringBuilder buf = new StringBuilder(512);
76 for (final String logmsg : logmsgs) {
77 buf.append(logmsg).append('\n');
78 }
79 logmsgs = null;
80 query.sendReply(buf);
81 }
82 }
83
84 /** Helper class to iterate over logback's recent log messages. */
85 private static final class LogIterator implements Iterator<String>,
86 Iterable<String> {
87
88 private final CyclicBufferAppender<ILoggingEvent> logbuf;
89 private final StringBuilder buf = new StringBuilder(64);
90 private int nevents;
91
92 public LogIterator() {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…