Использование нескольких меток в Java Application Monitor (JAMon)

Можно ли отслеживать различные этапы обработки, используя один и тот же класс JAMon Monitor? Например, в примере кода я хотел бы измерить время выполнения "Point1" и "Point2". Однако пример возвращает только статистику о втором шаге. Конечно, я могу создать несколько объектов типа Monitor. Но может быть, есть более чистый путь?

Monitor mon = null;     
for(int i =0; i < 1000; i++){
    //Part1
    mon = MonitorFactory.start("Point 1");
    Thread.sleep(2);
    mon.stop();     

    //Part2
    mon = MonitorFactory.start("Point 2");
    mon.stop();
}

System.out.println(mon.toString());

Выход:

JAMon Label = точка 2, единицы измерения = мс.: (LastValue=0,0, Hits=1000,0, Avg=0,001, Total=1,0, Min = 0,0, Max=1,0, Active = 0,0, Avg Active=1,0, Max Active=1,0, Первый доступ = ср 17 июн 10:40:44 CEST 2015, последний доступ = ср 17 июн 10:40:46 CEST 2015)

Желаемый результат:

JAMon Label = Точка 1, Единицы = мс.: (LastValue=0.0, Hits=1000.0, Avg=0.001, Total=1.0, Min=0.0, Max=1.0, Active=0.0, Avg Active=1.0, Max Active=1.0, Первый доступ = ср 17 июн 10:40:44 CEST 2015, последний доступ = ср 17 июн 10:40:46 CEST 2015)

JAMon Label = точка 2, единицы измерения = мс.: (LastValue=0,0, Hits=1000,0, Avg=0,001, Total=1,0, Min = 0,0, Max=1,0, Active = 0,0, Avg Active=1,0, Max Active=1,0, Первый доступ = ср 17 июн 10:40:44 CEST 2015, последний доступ = ср 17 июн 10:40:46 CEST 2015)

2 ответа

Решение

Вы можете изменить вызов монитора toString() на явный вызов getMonitor(...).

Monitor mon = null;   

for(int i =0; i < 1000; i++){
  //Part1
  mon = MonitorFactory.start("Point 1");
  Thread.sleep(2);
  mon.stop();     

  //Part2
  mon = MonitorFactory.start("Point 2");
  mon.stop();
}

System.out.println(MonitorFactory.getMonitor("Point 1").toString());
System.out.println(MonitorFactory.getMonitor("Point 2").toString());

Или вы можете создать 2 монитора.

Monitor mon1 = null;   
Monitor mon2 = null;     

for(int i =0; i < 1000; i++){
  //Part1
  mon1 = MonitorFactory.start("Point 1");
  Thread.sleep(2);
  mon1.stop();     

  //Part2
  mon2 = MonitorFactory.start("Point 2");
  mon2.stop();
}

System.out.println(mon1.toString());
System.out.println(mon2.toString());

Есть лучший способ, чем другой ответ:

for( Object monitor: MonitorFactory.getMap().values() ){
    System.out.println( monitor ); 
}

Это будет печатать все используемые мониторы до сих пор. Во всех темах. Именно то, что вы хотите.

Вы можете проверить законченный пример кода и вывести здесь.

Другие вопросы по тегам