Skip to content

Instantly share code, notes, and snippets.

@rodion-solovev-7
Last active October 23, 2021 08:56
Show Gist options
  • Save rodion-solovev-7/4e7a9e79cc5756a61a7e61ec73304e49 to your computer and use it in GitHub Desktop.
Save rodion-solovev-7/4e7a9e79cc5756a61a7e61ec73304e49 to your computer and use it in GitHub Desktop.
Сами файлы логов не залились [:-|]. С учётом поправок, записей, отсутствующих в pin_log.txt, но присутствующих в pintset_finish.log - нет. out2.txt - записи из pintset_finish.log, которых нет в pin_log.txt
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "d0c0b401",
"metadata": {},
"source": [
"# Сравнение 2-ух логов"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "77fca082",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:43:33.000427Z",
"start_time": "2021-10-23T08:43:32.801666Z"
}
},
"outputs": [],
"source": [
"from datetime import datetime, timedelta\n",
"\n",
"# !conda install -c conda-forge dateparser\n",
"# !python -m pip install dateparser\n",
"import dateparser"
]
},
{
"cell_type": "markdown",
"id": "79a43f97",
"metadata": {},
"source": [
"## Задание"
]
},
{
"cell_type": "markdown",
"id": "d37359aa",
"metadata": {},
"source": [
"\n",
"\n",
"- Есть 2 лога: \n",
" ```\n",
" pin_log.txt (54.5 MB)\n",
" pintset_finish.log (3 MB)\n",
" ```\n",
"- `pin_log.txt` ведется с 10-го августа, а `pintset_finish.log` - с 26-го. **Записи до 26-го августа нужно игнорировать**.\n",
"- В `pin_log.txt` рассматривать только записи вида `\"Пинцет закончил\"`.\n",
"- В `pintset_finish.log` содержатся уже отфильтрованные записи - рассматривать нужно все.\n",
"- Записи должны совпадать посекундно. Но возможно что в `pintset_finish.log` запись будет начинаться со следующей секунды (можно увидеть по миллисекундам). \n",
"- Время в `pin_log.txt` местное, а в `pintset_finish.log` - UTC. Т.е. **ко времени из `pintset_finish.log` нужно прибавить +5 часов**, чтобы время сошлось.\n",
"\n",
"Из этих 2-ух файлов нужно сформировать 2 новых файла: \n",
"1. вызовы из `pin_log.txt`, которых нет в `pintset_finish.log` (но таких предположительно 0)\n",
"2. вызовы из `pintset_finish.log`, которых нет в `pin_log.txt`"
]
},
{
"cell_type": "markdown",
"id": "82bef46a",
"metadata": {},
"source": [
"Оригинал (для сверки в случае непонимания)\n",
"\n",
"```\n",
"1. Вот есть 2 лога. В pin_log.txt надо смотреть записи вида \"Пинцет закончил\". Во втором - все подряд. Записи должны биться секунда в секунду или может быть так, что в pintset_finish.log запись уже на следующей секунде, но в её начале (тут просто есть миллисекунды).\n",
"В общем нужно из этих 2х файлов сформировать следующие 2: \n",
"1) вызовы из pin_log.txt, которых нет во втором (но таких быть не должно с поправкой на то, что pin_log ведется с 10 августа, а pintset_finish с 26го, первые записи в принципе можно отрезать.\n",
"2) вызовы из pintset_finish, которых нет в pin_log\n",
"\n",
"при этом надо учесть, что время в pin_log местное, а в pintset_finish - UTC, т.е. к последнему надо прибавлять 5 часов, чтобы время сошлось\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "a5b2dbb9",
"metadata": {},
"source": [
"## Поверхностно смотрим на содержимое логов "
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "907203fe",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:43:33.005484Z",
"start_time": "2021-10-23T08:43:33.001339Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pin_log.txt:\n",
"08/10/21 - 16:41:02, packs amount ,10\n",
"08/10/21 - 16:41:05, Подъем пинцета \n",
"08/10/21 - 16:41:07, packs amount ,10\n",
"08/10/21 - 16:41:12, packs amount ,10\n",
"08/10/21 - 16:41:16, packs amount ,12\n",
"08/10/21 - 16:41:21, packs amount ,12\n",
"08/10/21 - 16:41:26, packs amount ,12\n",
"08/10/21 - 16:41:31, packs amount ,0\n",
"08/10/21 - 16:41:31, Пинцет закончил \n",
"08/10/21 - 16:41:36, packs amount ,0\n"
]
}
],
"source": [
"log1_filename = \"pin_log.txt\"\n",
"print(f\"{log1_filename}:\")\n",
"with open(log1_filename, 'r') as f:\n",
" for _ in range(10):\n",
" print(f.readline(), end='')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b21a560d",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:43:33.083383Z",
"start_time": "2021-10-23T08:43:33.006865Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pintset_finish.log:\n",
"2021-08-26 13:08:53.402 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:11:22.327 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:13:51.231 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:16:20.139 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:18:44.267 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:23:03.653 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:25:32.514 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:27:56.657 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:30:25.565 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-08-26 13:33:04.074 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n"
]
}
],
"source": [
"log2_filename = \"pintset_finish.log\"\n",
"print(f\"{log2_filename}:\")\n",
"with open(log2_filename, 'r') as f:\n",
" for _ in range(10):\n",
" print(f.readline(), end='')"
]
},
{
"cell_type": "markdown",
"id": "6b861616",
"metadata": {},
"source": [
"Гипотеза: во втором логе содержатся одни и те же записи (меняются только даты)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "aaddfc9e",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:43:33.191408Z",
"start_time": "2021-10-23T08:43:33.084959Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"len(records) = 5\n",
"(' | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\\n', 4042)\n",
"(' | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\\n', 7675)\n",
"(' | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\\n', 4614)\n",
"(' | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\\n', 4115)\n",
"(' | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://localhost/api/v1_0/pintset_finish; client: 172.24.0.4\\n', 1)\n"
]
}
],
"source": [
"from collections import Counter\n",
"\n",
"records = Counter()\n",
"with open(log2_filename, 'r') as f:\n",
" lines = map(lambda line: line[23:], f.readlines())\n",
" records = Counter(lines)\n",
"print(f\"{len(records) = }\")\n",
"print(*records.items(), sep='\\n')"
]
},
{
"cell_type": "markdown",
"id": "183116a5",
"metadata": {},
"source": [
"Вывод: записи одни и те же, но меняются клиенты и адрес по которую обращаются к хосту"
]
},
{
"cell_type": "markdown",
"id": "151f5fde",
"metadata": {},
"source": [
"## Достаём все моменты завершения пинцета из pin_log.txt"
]
},
{
"cell_type": "markdown",
"id": "bd0aa9a3",
"metadata": {},
"source": [
"- Отфильтровывать записи, не содержащие `\"Пинцет закончил\"`\n",
"- Записи до 26-го августа можно игнорировать"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a8be4229",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:44:04.893006Z",
"start_time": "2021-10-23T08:43:33.193186Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"len(pintset_finish_times1) = 20394\n",
"2021-08-26 18:08:53\n",
"2021-08-26 18:11:22\n",
"2021-08-26 18:13:51\n",
"2021-08-26 18:16:20\n",
"2021-08-26 18:18:44\n",
"2021-08-26 18:23:03\n",
"2021-08-26 18:25:32\n",
"2021-08-26 18:27:56\n",
"2021-08-26 18:30:25\n",
"2021-08-26 18:33:04\n",
"2021-08-26 18:43:14\n",
"2021-08-26 18:45:47\n",
"2021-08-26 18:50:16\n",
"2021-08-26 18:52:40\n",
"2021-08-26 18:55:09\n",
"2021-08-26 18:57:38\n",
"2021-08-26 19:00:07\n",
"2021-08-26 19:02:36\n",
"2021-08-26 19:05:05\n",
"2021-08-26 19:07:43\n",
"2021-08-26 19:10:12\n",
"2021-08-26 19:12:41\n",
"2021-08-26 19:15:05\n",
"2021-08-26 19:19:39\n",
"2021-08-26 19:22:08\n",
"2021-08-26 19:24:37\n",
"2021-08-26 19:27:06\n",
"2021-08-26 19:29:35\n",
"2021-08-26 19:32:13\n",
"2021-08-26 19:34:42\n"
]
}
],
"source": [
"pintset_finish_times1 = []\n",
"with open(log1_filename, 'r') as f:\n",
" for line in f.readlines():\n",
" \n",
" # смотреть только записи вида \"Пинцет закончил\"\n",
" if 'Пинцет закончил' not in line:\n",
" continue\n",
" \n",
" time = dateparser.parse(line[:19])\n",
" \n",
" # записи до 26-го августа можно игнорировать\n",
" if time < datetime(2021, 8, 26, 18, 8, 53):\n",
" continue\n",
" \n",
" pintset_finish_times1.append(time)\n",
"\n",
"print(f\"{len(pintset_finish_times1) = }\", *pintset_finish_times1[:30], sep='\\n')"
]
},
{
"cell_type": "markdown",
"id": "5334feca",
"metadata": {},
"source": [
"## Достаём все моменты завершения пинцета из pintset_finish.log"
]
},
{
"cell_type": "markdown",
"id": "dd743754",
"metadata": {},
"source": [
"- В pintset_finish.log содержатся уже отфильтрованные записи - рассматривать нужно все.\n",
"- Смещаем даты на 5 часов и соотносим"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1fb4d771",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:44:32.068358Z",
"start_time": "2021-10-23T08:44:04.894773Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"len(pintset_finish_times2) = 20447\n",
"2021-08-26 18:08:53.402000\n",
"2021-08-26 18:11:22.327000\n",
"2021-08-26 18:13:51.231000\n",
"2021-08-26 18:16:20.139000\n",
"2021-08-26 18:18:44.267000\n",
"2021-08-26 18:23:03.653000\n",
"2021-08-26 18:25:32.514000\n",
"2021-08-26 18:27:56.657000\n",
"2021-08-26 18:30:25.565000\n",
"2021-08-26 18:33:04.074000\n",
"2021-08-26 18:43:14.082000\n",
"2021-08-26 18:45:47.821000\n",
"2021-08-26 18:50:16.792000\n",
"2021-08-26 18:52:40.907000\n",
"2021-08-26 18:55:09.818000\n",
"2021-08-26 18:57:38.723000\n",
"2021-08-26 19:00:07.622000\n",
"2021-08-26 19:02:36.557000\n",
"2021-08-26 19:05:05.459000\n",
"2021-08-26 19:07:43.939000\n",
"2021-08-26 19:10:12.858000\n",
"2021-08-26 19:12:41.761000\n",
"2021-08-26 19:15:05.890000\n",
"2021-08-26 19:19:39.661000\n",
"2021-08-26 19:22:08.553000\n",
"2021-08-26 19:24:37.535000\n",
"2021-08-26 19:27:06.389000\n",
"2021-08-26 19:29:35.300000\n",
"2021-08-26 19:32:13.792000\n",
"2021-08-26 19:34:42.696000\n"
]
}
],
"source": [
"pintset_finish_times2 = []\n",
"with open(log2_filename, 'r') as f:\n",
" for line in f.readlines():\n",
" time = dateparser.parse(line[:23]) + timedelta(hours=5)\n",
" pintset_finish_times2.append(time)\n",
"\n",
"print(f\"{len(pintset_finish_times2) = }\", *pintset_finish_times2[:30], sep='\\n')"
]
},
{
"cell_type": "markdown",
"id": "e793ebd4",
"metadata": {},
"source": [
"## Совмещаем данные + ищем несовпадения"
]
},
{
"cell_type": "markdown",
"id": "db6c649f",
"metadata": {},
"source": [
"Для каждого времени записи считаем количество соответствующих ему записей из противоположного лога. Соответствие будет определяться из разницы времени логгирования (в рамках 0.5 секунд до и 1.5 секунд после, например).\n",
"\n",
"Записи с 0 или >=2 соответствующими (из другого лога) записями будут претендентами для разбора полётов"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "a00f27f5",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:44:32.246922Z",
"start_time": "2021-10-23T08:44:32.069686Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Время из лога | подошедшие | времена в диапазоне\n",
"pin_log.txt -> pintset_finish.log\n",
"--------\n",
"pintset_finish.log -> pin_log.txt\n",
"--------\n",
"2021-09-09 05:18:55.587000 [] []\n",
"2021-09-09 05:21:55.264000 [] []\n",
"2021-09-09 05:44:10.396000 [] []\n",
"2021-09-09 05:46:35.616000 [] []\n",
"2021-09-09 05:55:31.568000 [] []\n",
"2021-09-09 05:57:55.671000 [] []\n",
"2021-09-09 06:17:01.693000 [] []\n",
"2021-09-09 06:46:20.104000 [] []\n",
"2021-09-09 06:48:10.700000 [] []\n",
"2021-09-09 07:00:10.024000 [] []\n",
"2021-09-09 07:09:42.812000 [] []\n",
"2021-09-09 07:12:06.694000 [] []\n",
"2021-09-09 07:19:19.579000 [] []\n",
"2021-09-09 07:22:18.747000 [] []\n",
"2021-09-09 07:24:42.884000 [] []\n",
"2021-09-09 07:27:42.037000 [] []\n",
"2021-09-09 07:30:06.161000 [] []\n",
"2021-09-09 07:37:52.575000 [] []\n",
"2021-09-09 07:40:16.707000 [] []\n",
"2021-09-09 07:42:40.331000 [] []\n",
"2021-09-09 07:56:27.785000 [] []\n",
"2021-09-09 08:03:38.464000 [] []\n",
"2021-09-09 08:06:02.860000 [] []\n",
"2021-09-10 01:16:59.283000 [] []\n",
"2021-09-13 08:10:15.323000 [] []\n",
"2021-09-23 16:38:38.975000 [] ['2021-09-23 16:38:40']\n",
"2021-09-23 16:44:10.386000 [] ['2021-09-23 16:44:11']\n",
"2021-09-23 16:46:39.305000 [] ['2021-09-23 16:46:40']\n",
"2021-09-23 16:49:37.052000 [] ['2021-09-23 16:49:38']\n",
"2021-09-23 16:55:27.654000 [] ['2021-09-23 16:55:28']\n",
"2021-09-23 16:58:30.195000 [] ['2021-09-23 16:58:31']\n",
"2021-09-23 17:04:25.699000 [] ['2021-09-23 17:04:26']\n",
"2021-09-23 17:07:47.397000 [] ['2021-09-23 17:07:48']\n",
"2021-09-23 17:10:45.178000 [] ['2021-09-23 17:10:46']\n",
"2021-09-23 17:13:47.675000 [] ['2021-09-23 17:13:48']\n",
"2021-09-23 18:16:57.568000 [] ['2021-09-23 18:16:58']\n",
"2021-09-23 18:20:00.109000 [] ['2021-09-23 18:20:01']\n",
"2021-09-23 18:23:02.634000 [] ['2021-09-23 18:23:03']\n",
"2021-09-23 18:26:05.158000 [] ['2021-09-23 18:26:06']\n",
"2021-10-07 16:22:44.104000 [] []\n",
"2021-10-08 17:22:53.268000 [] []\n",
"2021-10-08 17:24:33.732000 [] []\n",
"2021-10-09 16:32:33.135000 [] []\n",
"2021-10-09 16:32:42.774000 [] []\n",
"2021-10-13 08:43:28.622000 [] []\n",
"2021-10-13 17:32:15.877000 [] []\n",
"2021-10-13 17:32:30.740000 [] []\n",
"2021-10-13 17:32:33.526000 [] []\n",
"2021-10-14 16:08:15.310000 [] []\n",
"2021-10-14 16:08:44.680000 [] []\n",
"2021-10-14 16:17:45.655000 [] []\n",
"2021-10-15 16:21:00.066000 [] []\n",
"2021-10-15 16:21:57.825000 [] []\n",
"2021-10-16 16:21:56.235000 [] []\n",
"2021-10-16 16:21:58.692000 [] []\n",
"2021-10-16 16:22:00.703000 [] []\n",
"2021-10-16 16:22:17.991000 [] []\n",
"2021-10-16 16:22:20.777000 [] []\n",
"2021-10-16 23:56:30.806000 [] []\n",
"2021-10-17 15:59:49.320000 [] []\n",
"2021-10-21 19:08:05.464000 [] []\n",
"2021-10-21 19:08:09.904000 [] []\n",
"2021-10-21 19:08:11.328000 [] []\n",
"2021-10-21 19:08:11.561000 [] []\n",
"2021-10-21 19:08:13.244000 [] []\n",
"2021-10-21 19:08:56.764000 [] []\n",
"2021-10-21 19:21:22.545000 [] []\n"
]
}
],
"source": [
"from bisect import bisect_left, bisect_right\n",
"\n",
"def is_paired(time1: datetime, time2: datetime) -> bool:\n",
" \"\"\"\n",
" Определяет по времени логгирования, являются ли \n",
" записи в разных логах одним и тем же событием\n",
" \"\"\"\n",
" mn = timedelta(seconds=-0.3)\n",
" mx = timedelta(seconds=+1.1)\n",
" return mn <= time2 - time1 <= mx\n",
"\n",
"\n",
"def filter_times_in_interval(\n",
" times: list[datetime],\n",
" time: datetime,\n",
") -> list[datetime]:\n",
" \"\"\"\n",
" Возвращает все datetime, находящиеся \n",
" во временном диапазоне [-10; +10] секунд\n",
" \"\"\"\n",
" mn, mx = timedelta(seconds=-10), timedelta(seconds=+10)\n",
" l = bisect_left(times, time + mn)\n",
" r = bisect_right(times, time + mx)\n",
" return times[l:r]\n",
"\n",
"\n",
"print(\"Время из лога | подошедшие | времена в диапазоне\")\n",
"\n",
"print(f\"{log1_filename} -> {log2_filename}\")\n",
"print('-' * 8)\n",
"not_exists_in_2 = []\n",
"for i, time in enumerate(pintset_finish_times1, 0):\n",
" \n",
" times_in_interval = filter_times_in_interval(pintset_finish_times1, time)\n",
" \n",
" filtered_times = [\n",
" t for t in times_in_interval\n",
" if is_paired(time, t)\n",
" ]\n",
"\n",
" if len(filtered_times) != 1:\n",
" not_exists_in_2.append(time)\n",
" print(time, [*map(str, filtered_times)], [*map(str, times_in_interval)])\n",
"\n",
"print(f\"{log2_filename} -> {log1_filename}\")\n",
"print('-' * 8)\n",
"not_exists_in_1 = []\n",
"for i, time in enumerate(pintset_finish_times2, 0):\n",
" \n",
" times_in_interval = filter_times_in_interval(pintset_finish_times1, time)\n",
" filtered_times = [\n",
" t for t in times_in_interval\n",
" if is_paired(t, time)\n",
" ]\n",
"\n",
" if len(filtered_times) != 1:\n",
" not_exists_in_1.append(time)\n",
" print(time, [*map(str, filtered_times)], [*map(str, times_in_interval)])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "cb24f985",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:51:39.793724Z",
"start_time": "2021-10-23T08:51:39.789955Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"len(not_exists_in_1) = 67 | len(not_exists_in_2) = 0\n"
]
}
],
"source": [
"# для ускорения\n",
"not_exists_in_1 = set(not_exists_in_1)\n",
"not_exists_in_2 = set(not_exists_in_2)\n",
"\n",
"print(f\"{len(not_exists_in_1) = } | {len(not_exists_in_2) = }\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "6a38b322",
"metadata": {
"ExecuteTime": {
"end_time": "2021-10-23T08:45:33.246462Z",
"start_time": "2021-10-23T08:44:32.345608Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"------------\n",
"2021-09-09 00:18:55.587 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 00:21:55.264 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 00:44:10.396 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 00:46:35.616 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 00:55:31.568 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 00:57:55.671 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 01:17:01.693 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 01:46:20.104 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 01:48:10.700 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:00:10.024 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:09:42.812 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:12:06.694 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:19:19.579 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:22:18.747 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:24:42.884 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:27:42.037 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:30:06.161 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:37:52.575 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:40:16.707 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:42:40.331 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 02:56:27.785 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 03:03:38.464 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 03:06:02.860 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4\n",
"2021-09-09 20:16:59.283 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-13 03:10:15.323 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 11:38:38.975 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 11:44:10.386 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 11:46:39.305 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 11:49:37.052 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 11:55:27.654 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 11:58:30.195 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 12:04:25.699 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 12:07:47.397 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 12:10:45.178 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 12:13:47.675 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 13:16:57.568 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 13:20:00.109 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 13:23:02.634 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-09-23 13:26:05.158 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4\n",
"2021-10-07 11:22:44.104 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\n",
"2021-10-08 12:22:53.268 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\n",
"2021-10-08 12:24:33.732 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\n",
"2021-10-09 11:32:33.135 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\n",
"2021-10-09 11:32:42.774 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\n",
"2021-10-13 03:43:28.622 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4\n",
"2021-10-13 12:32:15.877 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-13 12:32:30.740 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-13 12:32:33.526 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-14 11:08:15.310 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-14 11:08:44.680 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-14 11:17:45.655 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-15 11:21:00.066 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-15 11:21:57.825 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2021-10-16 11:21:56.235 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-16 11:21:58.692 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-16 11:22:00.703 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-16 11:22:17.991 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-16 11:22:20.777 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-16 18:56:30.806 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://localhost/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-17 10:59:49.320 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:08:05.464 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:08:09.904 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:08:11.328 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:08:11.561 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:08:13.244 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:08:56.764 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n",
"2021-10-21 14:21:22.545 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4\n"
]
}
],
"source": [
"out1_filename = 'out1.log'\n",
"out2_filename = 'out2.log'\n",
"\n",
"with (open(log1_filename, 'r') as f,\n",
" open(out1_filename, 'w') as out):\n",
" for line in f.readlines():\n",
" # смотреть только записи вида \"Пинцет закончил\"\n",
" if 'Пинцет закончил' not in line:\n",
" continue\n",
" \n",
" time = dateparser.parse(line[:19])\n",
" \n",
" # записи до 26-го августа можно игнорировать\n",
" if time < datetime(2021, 8, 26, 18, 8, 53):\n",
" continue\n",
" \n",
" if time in not_exists_in_2:\n",
" print(line, end='')\n",
" print(line, end='', file=out)\n",
"\n",
"print('-' * 12)\n",
" \n",
"with (open(log2_filename, 'r') as f,\n",
" open(out2_filename, 'w') as out):\n",
" for line in f.readlines():\n",
" time = dateparser.parse(line[:23]) + timedelta(hours=5)\n",
" \n",
" if time in not_exists_in_1:\n",
" print(line, end='')\n",
" print(line, end='', file=out)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}
#!/usr/bin/env python
# coding: utf-8
# экспорт кода из блокнота
# # Сравнение 2-ух логов
# In[10]:
from datetime import datetime, timedelta
# !conda install -c conda-forge dateparser
# !python -m pip install dateparser
import dateparser
# ## Задание
#
#
# - Есть 2 лога:
# ```
# pin_log.txt (54.5 MB)
# pintset_finish.log (3 MB)
# ```
# - `pin_log.txt` ведется с 10-го августа, а `pintset_finish.log` - с 26-го. **Записи до 26-го августа нужно игнорировать**.
# - В `pin_log.txt` рассматривать только записи вида `"Пинцет закончил"`.
# - В `pintset_finish.log` содержатся уже отфильтрованные записи - рассматривать нужно все.
# - Записи должны совпадать посекундно. Но возможно что в `pintset_finish.log` запись будет начинаться со следующей секунды (можно увидеть по миллисекундам).
# - Время в `pin_log.txt` местное, а в `pintset_finish.log` - UTC. Т.е. **ко времени из `pintset_finish.log` нужно прибавить +5 часов**, чтобы время сошлось.
#
# Из этих 2-ух файлов нужно сформировать 2 новых файла:
# 1. вызовы из `pin_log.txt`, которых нет в `pintset_finish.log` (но таких предположительно 0)
# 2. вызовы из `pintset_finish.log`, которых нет в `pin_log.txt`
# Оригинал (для сверки в случае непонимания)
#
# ```
# 1. Вот есть 2 лога. В pin_log.txt надо смотреть записи вида "Пинцет закончил". Во втором - все подряд. Записи должны биться секунда в секунду или может быть так, что в pintset_finish.log запись уже на следующей секунде, но в её начале (тут просто есть миллисекунды).
# В общем нужно из этих 2х файлов сформировать следующие 2:
# 1) вызовы из pin_log.txt, которых нет во втором (но таких быть не должно с поправкой на то, что pin_log ведется с 10 августа, а pintset_finish с 26го, первые записи в принципе можно отрезать.
# 2) вызовы из pintset_finish, которых нет в pin_log
#
# при этом надо учесть, что время в pin_log местное, а в pintset_finish - UTC, т.е. к последнему надо прибавлять 5 часов, чтобы время сошлось
# ```
# ## Поверхностно смотрим на содержимое логов
# In[11]:
log1_filename = "pin_log.txt"
print(f"{log1_filename}:")
with open(log1_filename, 'r') as f:
for _ in range(10):
print(f.readline(), end='')
# In[12]:
log2_filename = "pintset_finish.log"
print(f"{log2_filename}:")
with open(log2_filename, 'r') as f:
for _ in range(10):
print(f.readline(), end='')
# Гипотеза: во втором логе содержатся одни и те же записи (меняются только даты)
# In[13]:
from collections import Counter
records = Counter()
with open(log2_filename, 'r') as f:
lines = map(lambda line: line[23:], f.readlines())
records = Counter(lines)
print(f"{len(records) = }")
print(*records.items(), sep='\n')
# Вывод: записи одни и те же, но меняются клиенты и адрес по которую обращаются к хосту
# ## Достаём все моменты завершения пинцета из pin_log.txt
# - Отфильтровывать записи, не содержащие `"Пинцет закончил"`
# - Записи до 26-го августа можно игнорировать
# In[14]:
pintset_finish_times1 = []
with open(log1_filename, 'r') as f:
for line in f.readlines():
# смотреть только записи вида "Пинцет закончил"
if 'Пинцет закончил' not in line:
continue
time = dateparser.parse(line[:19])
# записи до 26-го августа можно игнорировать
if time < datetime(2021, 8, 26, 18, 8, 53):
continue
pintset_finish_times1.append(time)
print(f"{len(pintset_finish_times1) = }", *pintset_finish_times1, sep='\n')
# ## Достаём все моменты завершения пинцета из pintset_finish.log
# - В pintset_finish.log содержатся уже отфильтрованные записи - рассматривать нужно все.
# - Смещаем даты на 5 часов и соотносим
# In[15]:
pintset_finish_times2 = []
with open(log2_filename, 'r') as f:
for line in f.readlines():
time = dateparser.parse(line[:23]) + timedelta(hours=5)
pintset_finish_times2.append(time)
print(f"{len(pintset_finish_times2) = }", *pintset_finish_times2, sep='\n')
# ## Совмещаем данные + ищем несовпадения
# Для каждого времени записи считаем количество соответствующих ему записей из противоположного лога. Соответствие будет определяться из разницы времени логгирования (в рамках 0.5 секунд до и 1.5 секунд после, например).
#
# Записи с 0 или >=2 соответствующими (из другого лога) записями будут претендентами для разбора полётов
# In[16]:
from bisect import bisect_left, bisect_right
def is_paired(time1: datetime, time2: datetime) -> bool:
"""
Определяет по времени логгирования, являются ли
записи в разных логах одним и тем же событием
"""
mn = timedelta(seconds=-0.3)
mx = timedelta(seconds=+1.1)
return mn <= time2 - time1 <= mx
def filter_times_in_interval(
times: list[datetime],
time: datetime,
) -> list[datetime]:
"""
Возвращает все datetime, находящиеся
во временном диапазоне [-10; +10] секунд
"""
mn, mx = timedelta(seconds=-10), timedelta(seconds=+10)
l = bisect_left(times, time + mn)
r = bisect_right(times, time + mx)
return times[l:r]
print("Время из лога | подошедшие | времена в диапазоне")
print(f"{log1_filename} -> {log2_filename}")
print('-' * 8)
not_exists_in_2 = []
for i, time in enumerate(pintset_finish_times1, 0):
times_in_interval = filter_times_in_interval(pintset_finish_times1, time)
filtered_times = [
t for t in times_in_interval
if is_paired(time, t)
]
if len(filtered_times) != 1:
not_exists_in_2.append(time)
print(time, [*map(str, filtered_times)], [*map(str, times_in_interval)])
print(f"{log2_filename} -> {log1_filename}")
print('-' * 8)
not_exists_in_1 = []
for i, time in enumerate(pintset_finish_times2, 0):
times_in_interval = filter_times_in_interval(pintset_finish_times1, time)
filtered_times = [
t for t in times_in_interval
if is_paired(t, time)
]
if len(filtered_times) != 1:
not_exists_in_1.append(time)
print(time, [*map(str, filtered_times)], [*map(str, times_in_interval)])
# In[17]:
# для ускорения
not_exists_in_1 = set(not_exists_in_1)
not_exists_in_2 = set(not_exists_in_2)
# In[18]:
out1_filename = 'out1.log'
out2_filename = 'out2.log'
with (open(log1_filename, 'r') as f,
open(out1_filename, 'w') as out):
for line in f.readlines():
# смотреть только записи вида "Пинцет закончил"
if 'Пинцет закончил' not in line:
continue
time = dateparser.parse(line[:19])
# записи до 26-го августа можно игнорировать
if time < datetime(2021, 8, 26, 18, 8, 53):
continue
if time in not_exists_in_2:
print(line, end='')
print(line, end='', file=out)
print('-' * 12)
with (open(log2_filename, 'r') as f,
open(out2_filename, 'w') as out):
for line in f.readlines():
time = dateparser.parse(line[:23]) + timedelta(hours=5)
if time in not_exists_in_1:
print(line, end='')
print(line, end='', file=out)
2021-09-09 00:18:55.587 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 00:21:55.264 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 00:44:10.396 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 00:46:35.616 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 00:55:31.568 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 00:57:55.671 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 01:17:01.693 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 01:46:20.104 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 01:48:10.700 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:00:10.024 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:09:42.812 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:12:06.694 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:19:19.579 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:22:18.747 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:24:42.884 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:27:42.037 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:30:06.161 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:37:52.575 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:40:16.707 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:42:40.331 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 02:56:27.785 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 03:03:38.464 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 03:06:02.860 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.21.0.4
2021-09-09 20:16:59.283 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-13 03:10:15.323 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 11:38:38.975 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 11:44:10.386 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 11:46:39.305 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 11:49:37.052 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 11:55:27.654 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 11:58:30.195 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 12:04:25.699 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 12:07:47.397 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 12:10:45.178 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 12:13:47.675 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 13:16:57.568 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 13:20:00.109 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 13:23:02.634 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-09-23 13:26:05.158 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.22.0.4
2021-10-07 11:22:44.104 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4
2021-10-08 12:22:53.268 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4
2021-10-08 12:24:33.732 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4
2021-10-09 11:32:33.135 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4
2021-10-09 11:32:42.774 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4
2021-10-13 03:43:28.622 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.23.0.4
2021-10-13 12:32:15.877 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-13 12:32:30.740 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-13 12:32:33.526 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-14 11:08:15.310 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-14 11:08:44.680 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-14 11:17:45.655 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-15 11:21:00.066 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-15 11:21:57.825 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-16 11:21:56.235 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-16 11:21:58.692 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-16 11:22:00.703 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-16 11:22:17.991 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-16 11:22:20.777 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-16 18:56:30.806 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://localhost/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-17 10:59:49.320 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:08:05.464 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:08:09.904 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:08:11.328 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:08:11.561 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:08:13.244 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:08:56.764 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
2021-10-21 14:21:22.545 | INFO | app.routers.custom_routers:custom_route_handler:49 - PUT http://10.98.2.21/api/v1_0/pintset_finish; client: 172.24.0.4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment