001/* 002 * (C) Copyright 2017 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * bdelbosc 018 */ 019package org.nuxeo.lib.stream.tools.command; 020 021import org.apache.commons.cli.CommandLine; 022import org.apache.commons.cli.Option; 023import org.apache.commons.cli.Options; 024import org.nuxeo.lib.stream.log.LogLag; 025import org.nuxeo.lib.stream.log.LogManager; 026 027/** 028 * @since 9.3 029 */ 030public class LagCommand extends Command { 031 032 protected static final String NAME = "lag"; 033 034 @Override 035 public String name() { 036 return NAME; 037 } 038 039 @Override 040 public void updateOptions(Options options) { 041 options.addOption( 042 Option.builder("l").longOpt("log-name").desc("Log name").hasArg().argName("LOG_NAME").build()); 043 } 044 045 @Override 046 public boolean run(LogManager manager, CommandLine cmd) throws InterruptedException { 047 String name = cmd.getOptionValue("log-name"); 048 if (name != null) { 049 lag(manager, name); 050 } else { 051 lag(manager); 052 } 053 return true; 054 } 055 056 protected void lag(LogManager manager) { 057 System.out.println("# " + manager); 058 for (String name : manager.listAll()) { 059 lag(manager, name); 060 } 061 } 062 063 protected void lag(LogManager manager, String name) { 064 System.out.println("## Log: " + name); 065 manager.listConsumerGroups(name).forEach(group -> renderLag(group, manager.getLag(name, group))); 066 } 067 068 protected void renderLag(String group, LogLag lag) { 069 System.out.println("### Group: " + group); 070 System.out.println("| lag | pos | end | posOffset | endOffset |\n" + "| --- | ---: | ---: | ---: | ---: |"); 071 System.out.println(String.format("|%d|%d|%d|%d|%d|", lag.lag(), lag.lower(), lag.upper(), lag.lowerOffset(), 072 lag.upperOffset())); 073 } 074}