Парсинг журнала CPU, группировка и отчетность - PullRequest
0 голосов
/ 26 июня 2019

Ниже приведен пример чтения файла журнала, включая: JobStatus: (Завершено, Обработка), JobName, InstanceName, Duration.
Последовательность событий НЕ гарантируется.

С использованием Java, какой самый эффективный способ полностью проанализировать этот файл журнала и сообщить имя каждого jobName и самую длинную продолжительность, которая потребовалась для завершения? Какие структуры данных вы бы использовали?

 HashMap<String, TreeMap<Integer, String>>
 or
 List<HashMap<String, TreeMap<Integer, String>>>   

Как бы вы распечатали окончательные результаты, отсортированные по различным именам заданий?

Sample Input:
--------------
"Processing jobName=execute    jobInstanceId=x1"
"Processing jobName=execute    jobInstanceId=y1"
"Finished   jobInstanceId=x1   duration=920"
"Finished   jobInstanceId=y1   duration=12009"
"Finished   jobInstanceId=z1   duration=50"
"Processing jobName=analyze    jobInstanceId=z1"

Expected Output:
--------------
execute  12009
analyze  50

1 Ответ

0 голосов
/ 27 июня 2019

Сначала начните с самой простой вещи.

  1. Определите класс, который содержит необходимую информацию.
  2. Создайте пустой List этого типа класса.
  3. Разобрать каждую запись в экземпляр этого класса и добавить ее в список.
  4. Сортировать список по названию задания (по возрастанию) и продолжительности (по убыванию).
  5. Перейти по спискупоследовательно и выведите первую запись для каждого имени задания.

Это просто, просто, достаточно эффективно и не должно использовать слишком много памяти.

У вас есть немногоСложность в том, что запись на самом деле занимает две строки, которые не обязательно расположены одна за другой.Но вы сказали, что анализ не является проблемой, поэтому я предполагаю, что вы знаете, как с этим справиться.

Единственная проблема, с которой вы можете столкнуться, - это если в файле журнала содержится так много записей, которые вы не можете сохранитьвсе в памяти.Если это так, то вы можете либо проявить творческий подход и сохранить только текущую самую длинную запись для каждого имени задания, либо вместо сохранения списка в памяти записать его на диск.Затем отсортируйте файл на диске и последовательно просмотрите его.

Сделайте самое простое, что, на ваш взгляд, сработает.Если это работает, не хватает памяти и завершается достаточно быстро, то все готово.Не беспокойтесь об оптимизации пространства или скорости.Переходите к другим, более важным вещам.

...