From 272dc23443ab364fcbad2294627ac43e5688cb4c Mon Sep 17 00:00:00 2001 From: nicolargo Date: Sun, 17 Mar 2024 10:18:40 +0100 Subject: Correct an issue with the events duration --- docs/api.rst | 319 +++++++++++---------- docs/man/glances.1 | 2 +- glances/events.py | 56 ++-- .../outputs/static/js/components/plugin-alert.vue | 1 + glances/outputs/static/public/glances.js | 2 +- 5 files changed, 195 insertions(+), 185 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index dc2d5f87..29d89a0c 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -109,16 +109,17 @@ GET alert Get plugin stats:: # curl http://localhost:61208/api/4/alert - [{"avg": 77.5178777948861, - "begin": 1710604536.0, + [{"avg": 75.96435906685214, + "begin": 1710667086.0, "count": 1, "desc": "", "end": -1, - "max": 77.5178777948861, - "min": 77.5178777948861, + "global": "No warning or critical alert detected", + "max": 75.96435906685214, + "min": 75.96435906685214, "sort": "memory_percent", "state": "WARNING", - "sum": 77.5178777948861, + "sum": 75.96435906685214, "top": [], "type": "MEM"}] @@ -136,25 +137,27 @@ Fields descriptions: * **top**: Top 3 processes name during the event period (unit is *list*) * **desc**: Description of the event (unit is *string*) * **sort**: Sort key of the top processes (unit is *string*) +* **global**: Global alert message (unit is *string*) Get a specific field:: # curl http://localhost:61208/api/4/alert/begin - {"begin": [1710604536.0]} + {"begin": [1710667086.0]} Get a specific item when field matches the given value:: - # curl http://localhost:61208/api/4/alert/begin/1710604536.0 - {"1710604536.0": [{"avg": 77.5178777948861, - "begin": 1710604536.0, + # curl http://localhost:61208/api/4/alert/begin/1710667086.0 + {"1710667086.0": [{"avg": 75.96435906685214, + "begin": 1710667086.0, "count": 1, "desc": "", "end": -1, - "max": 77.5178777948861, - "min": 77.5178777948861, + "global": "No warning or critical alert detected", + "max": 75.96435906685214, + "min": 75.96435906685214, "sort": "memory_percent", "state": "WARNING", - "sum": 77.5178777948861, + "sum": 75.96435906685214, "top": [], "type": "MEM"}]} @@ -172,7 +175,7 @@ Get plugin stats:: "refresh": 3.0, "regex": True, "result": None, - "timer": 0.7440230846405029}, + "timer": 0.4694037437438965}, {"count": 0, "countmax": 20.0, "countmin": None, @@ -181,7 +184,7 @@ Get plugin stats:: "refresh": 3.0, "regex": True, "result": None, - "timer": 0.7436609268188477}] + "timer": 0.469210147857666}] Fields descriptions: @@ -209,7 +212,7 @@ Get a specific item when field matches the given value:: "refresh": 3.0, "regex": True, "result": None, - "timer": 0.7440230846405029}]} + "timer": 0.4694037437438965}]} GET cloud --------- @@ -352,19 +355,19 @@ Get plugin stats:: # curl http://localhost:61208/api/4/cpu {"cpucore": 4, - "ctx_switches": 357566492, + "ctx_switches": 397941655, "guest": 0.0, - "idle": 64.2, - "interrupts": 213733514, - "iowait": 0.5, + "idle": 67.7, + "interrupts": 232246798, + "iowait": 4.2, "irq": 0.0, "nice": 0.0, - "soft_interrupts": 95026288, + "soft_interrupts": 105421124, "steal": 0.0, "syscalls": 0, - "system": 5.3, - "total": 35.3, - "user": 29.8} + "system": 6.5, + "total": 28.1, + "user": 21.7} Fields descriptions: @@ -397,7 +400,7 @@ Fields descriptions: Get a specific field:: # curl http://localhost:61208/api/4/cpu/total - {"total": 35.3} + {"total": 28.1} GET diskio ---------- @@ -407,16 +410,16 @@ Get plugin stats:: # curl http://localhost:61208/api/4/diskio [{"disk_name": "sda", "key": "disk_name", - "read_bytes": 50970915328, - "read_count": 1735461, - "write_bytes": 62791970816, - "write_count": 1145248}, + "read_bytes": 56719797760, + "read_count": 2143710, + "write_bytes": 126239322112, + "write_count": 1308736}, {"disk_name": "sda1", "key": "disk_name", - "read_bytes": 12546048, - "read_count": 344, + "read_bytes": 15003648, + "read_count": 432, "write_bytes": 0, - "write_count": 18}] + "write_count": 34}] Fields descriptions: @@ -445,10 +448,10 @@ Get a specific item when field matches the given value:: # curl http://localhost:61208/api/4/diskio/disk_name/sda {"sda": [{"disk_name": "sda", "key": "disk_name", - "read_bytes": 50970915328, - "read_count": 1735461, - "write_bytes": 62791970816, - "write_count": 1145248}]} + "read_bytes": 56719797760, + "read_count": 2143710, + "write_bytes": 126239322112, + "write_count": 1308736}]} GET folders ----------- @@ -475,13 +478,13 @@ Get plugin stats:: # curl http://localhost:61208/api/4/fs [{"device_name": "/dev/mapper/ubuntu--gnome--vg-root", - "free": 37301002240, + "free": 36942905344, "fs_type": "ext4", "key": "mnt_point", "mnt_point": "/", - "percent": 83.8, + "percent": 84.0, "size": 243334156288, - "used": 193645699072}, + "used": 194003795968}, {"device_name": "zsfpool", "free": 31195136, "fs_type": "zfs", @@ -510,13 +513,13 @@ Get a specific item when field matches the given value:: # curl http://localhost:61208/api/4/fs/mnt_point// {"/": [{"device_name": "/dev/mapper/ubuntu--gnome--vg-root", - "free": 37301002240, + "free": 36942905344, "fs_type": "ext4", "key": "mnt_point", "mnt_point": "/", - "percent": 83.8, + "percent": 84.0, "size": 243334156288, - "used": 193645699072}]} + "used": 194003795968}]} GET gpu ------- @@ -549,11 +552,11 @@ GET ip Get plugin stats:: # curl http://localhost:61208/api/4/ip - {"address": "192.168.0.32", - "gateway": "192.168.0.254", + {"address": "192.168.1.14", + "gateway": "192.168.1.1", "mask": "255.255.255.0", "mask_cidr": 24, - "public_address": "91.166.228.228", + "public_address": "92.151.148.66", "public_info_human": ""} Fields descriptions: @@ -568,7 +571,7 @@ Fields descriptions: Get a specific field:: # curl http://localhost:61208/api/4/ip/gateway - {"gateway": "192.168.0.254"} + {"gateway": "192.168.1.1"} GET irq ------- @@ -589,7 +592,7 @@ GET load Get plugin stats:: # curl http://localhost:61208/api/4/load - {"cpucore": 4, "min1": 1.87841796875, "min15": 2.724609375, "min5": 2.345703125} + {"cpucore": 4, "min1": 2.984375, "min15": 1.28515625, "min5": 1.4287109375} Fields descriptions: @@ -601,7 +604,7 @@ Fields descriptions: Get a specific field:: # curl http://localhost:61208/api/4/load/min1 - {"min1": 1.87841796875} + {"min1": 2.984375} GET mem ------- @@ -609,16 +612,16 @@ GET mem Get plugin stats:: # curl http://localhost:61208/api/4/mem - {"active": 2811445248, - "available": 1758904320, - "buffers": 236449792, - "cached": 2580111360, - "free": 1758904320, - "inactive": 3522138112, - "percent": 77.5, - "shared": 1017028608, + {"active": 2766622720, + "available": 1880444928, + "buffers": 101732352, + "cached": 1765371904, + "free": 1880444928, + "inactive": 3366436864, + "percent": 76.0, + "shared": 463790080, "total": 7823568896, - "used": 6064664576} + "used": 5943123968} Fields descriptions: @@ -645,13 +648,13 @@ GET memswap Get plugin stats:: # curl http://localhost:61208/api/4/memswap - {"free": 5102702592, - "percent": 36.9, - "sin": 2302570496, - "sout": 5334548480, + {"free": 4000202752, + "percent": 50.5, + "sin": 2879971328, + "sout": 6910545920, "time_since_update": 1, "total": 8082419712, - "used": 2979717120} + "used": 4082216960} Fields descriptions: @@ -676,15 +679,15 @@ Get plugin stats:: # curl http://localhost:61208/api/4/network [{"alias": None, "bytes_all": 0, - "bytes_all_gauge": 4407380752, + "bytes_all_gauge": 4797781425, "bytes_recv": 0, - "bytes_recv_gauge": 4170208788, + "bytes_recv_gauge": 4541115619, "bytes_sent": 0, - "bytes_sent_gauge": 237171964, + "bytes_sent_gauge": 256665806, "interface_name": "wlp2s0", "key": "interface_name", "speed": 0, - "time_since_update": 0.4740254878997803}, + "time_since_update": 0.3124685287475586}, {"alias": None, "bytes_all": 0, "bytes_all_gauge": 0, @@ -695,7 +698,7 @@ Get plugin stats:: "interface_name": "br-40875d2e2716", "key": "interface_name", "speed": 0, - "time_since_update": 0.4740254878997803}] + "time_since_update": 0.3124685287475586}] Fields descriptions: @@ -730,15 +733,15 @@ Get a specific item when field matches the given value:: # curl http://localhost:61208/api/4/network/interface_name/wlp2s0 {"wlp2s0": [{"alias": None, "bytes_all": 0, - "bytes_all_gauge": 4407380752, + "bytes_all_gauge": 4797781425, "bytes_recv": 0, - "bytes_recv_gauge": 4170208788, + "bytes_recv_gauge": 4541115619, "bytes_sent": 0, - "bytes_sent_gauge": 237171964, + "bytes_sent_gauge": 256665806, "interface_name": "wlp2s0", "key": "interface_name", "speed": 0, - "time_since_update": 0.4740254878997803}]} + "time_since_update": 0.3124685287475586}]} GET now ------- @@ -746,7 +749,7 @@ GET now Get plugin stats:: # curl http://localhost:61208/api/4/now - "2024-03-16 16:55:36 CET" + "2024-03-17 10:18:06 CET" GET percpu ---------- @@ -757,29 +760,29 @@ Get plugin stats:: [{"cpu_number": 0, "guest": 0.0, "guest_nice": 0.0, - "idle": 50.5, - "iowait": 0.0, + "idle": 47.0, + "iowait": 4.0, "irq": 0.0, "key": "cpu_number", "nice": 0.0, "softirq": 0.0, "steal": 0.0, - "system": 5.5, - "total": 49.5, - "user": 44.0}, + "system": 4.0, + "total": 53.0, + "user": 12.0}, {"cpu_number": 1, "guest": 0.0, "guest_nice": 0.0, - "idle": 43.6, - "iowait": 0.0, + "idle": 55.0, + "iowait": 1.0, "irq": 0.0, "key": "cpu_number", "nice": 0.0, "softirq": 0.0, "steal": 0.0, - "system": 5.5, - "total": 56.4, - "user": 50.9}] + "system": 4.0, + "total": 45.0, + "user": 11.0}] Fields descriptions: @@ -808,12 +811,12 @@ Get plugin stats:: # curl http://localhost:61208/api/4/ports [{"description": "DefaultGateway", - "host": "192.168.0.254", + "host": "192.168.1.1", "indice": "port_0", "port": 0, "refresh": 30, "rtt_warning": None, - "status": 0.007952, + "status": 0.00853, "timeout": 3}] Fields descriptions: @@ -830,19 +833,19 @@ Fields descriptions: Get a specific field:: # curl http://localhost:61208/api/4/ports/host - {"host": ["192.168.0.254"]} + {"host": ["192.168.1.1"]} Get a specific item when field matches the given value:: - # curl http://localhost:61208/api/4/ports/host/192.168.0.254 - {"192.168.0.254": [{"description": "DefaultGateway", - "host": "192.168.0.254", - "indice": "port_0", - "port": 0, - "refresh": 30, - "rtt_warning": None, - "status": 0.007952, - "timeout": 3}]} + # curl http://localhost:61208/api/4/ports/host/192.168.1.1 + {"192.168.1.1": [{"description": "DefaultGateway", + "host": "192.168.1.1", + "indice": "port_0", + "port": 0, + "refresh": 30, + "rtt_warning": None, + "status": 0.00853, + "timeout": 3}]} GET processcount ---------------- @@ -850,7 +853,7 @@ GET processcount Get plugin stats:: # curl http://localhost:61208/api/4/processcount - {"pid_max": 0, "running": 1, "sleeping": 334, "thread": 1645, "total": 402} + {"pid_max": 0, "running": 1, "sleeping": 341, "thread": 1773, "total": 410} Fields descriptions: @@ -863,7 +866,7 @@ Fields descriptions: Get a specific field:: # curl http://localhost:61208/api/4/processcount/total - {"total": 402} + {"total": 410} GET processlist --------------- @@ -903,66 +906,66 @@ GET quicklook Get plugin stats:: # curl http://localhost:61208/api/4/quicklook - {"cpu": 35.3, + {"cpu": 28.1, "cpu_hz": 2025000000.0, - "cpu_hz_current": 1799572750.0, + "cpu_hz_current": 2048951750.0000002, "cpu_name": "Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz", "cpucore": 4, - "load": 68.1, - "mem": 77.5, + "load": 32.1, + "mem": 76.0, "percpu": [{"cpu_number": 0, "guest": 0.0, "guest_nice": 0.0, - "idle": 50.5, - "iowait": 0.0, + "idle": 47.0, + "iowait": 4.0, "irq": 0.0, "key": "cpu_number", "nice": 0.0, "softirq": 0.0, "steal": 0.0, - "system": 5.5, - "total": 49.5, - "user": 44.0}, + "system": 4.0, + "total": 53.0, + "user": 12.0}, {"cpu_number": 1, "guest": 0.0, "guest_nice": 0.0, - "idle": 43.6, - "iowait": 0.0, + "idle": 55.0, + "iowait": 1.0, "irq": 0.0, "key": "cpu_number", "nice": 0.0, "softirq": 0.0, "steal": 0.0, - "system": 5.5, - "total": 56.4, - "user": 50.9}, + "system": 4.0, + "total": 45.0, + "user": 11.0}, {"cpu_number": 2, "guest": 0.0, "guest_nice": 0.0, - "idle": 75.9, - "iowait": 0.9, + "idle": 59.0, + "iowait": 0.0, "irq": 0.0, "key": "cpu_number", "nice": 0.0, - "softirq": 0.9, + "softirq": 0.0, "steal": 0.0, - "system": 5.4, - "total": 24.1, - "user": 17.0}, + "system": 5.0, + "total": 41.0, + "user": 4.0}, {"cpu_number": 3, "guest": 0.0, "guest_nice": 0.0, - "idle": 87.2, - "iowait": 1.8, + "idle": 25.0, + "iowait": 6.0, "irq": 0.0, "key": "cpu_number", "nice": 0.0, "softirq": 0.0, "steal": 0.0, - "system": 4.6, - "total": 12.8, - "user": 6.4}], - "swap": 36.9} + "system": 7.0, + "total": 75.0, + "user": 30.0}], + "swap": 50.5} Fields descriptions: @@ -1082,7 +1085,7 @@ GET uptime Get plugin stats:: # curl http://localhost:61208/api/4/uptime - "12 days, 7:54:55" + "13 days, 1:17:25" GET version ----------- @@ -1144,47 +1147,47 @@ Get top 2 processes of the processlist plugin:: "cpu_times": {"children_system": 0.0, "children_user": 0.0, "iowait": 0.0, - "system": 516.6, - "user": 5808.08}, + "system": 614.94, + "user": 7063.28}, "gids": {"effective": 1000, "real": 1000, "saved": 1000}, - "io_counters": [269836288, 3272704, 0, 0, 0], + "io_counters": [372940800, 3305472, 0, 0, 0], "key": "pid", - "memory_info": {"data": 1044848640, + "memory_info": {"data": 1338855424, "dirty": 0, "lib": 0, - "rss": 468369408, - "shared": 56168448, + "rss": 720982016, + "shared": 53673984, "text": 126423040, - "vms": 1221796024320}, - "memory_percent": 5.986646429859726, + "vms": 1221796945920}, + "memory_percent": 9.215513093629438, "name": "code", "nice": 0, - "num_threads": 14, + "num_threads": 15, "pid": 35570, "status": "S", "time_since_update": 1, "username": "nicolargo"}, {"cmdline": ["/snap/firefox/3728/usr/lib/firefox/firefox"], "cpu_percent": 0.0, - "cpu_times": {"children_system": 963.66, - "children_user": 7841.22, + "cpu_times": {"children_system": 994.29, + "children_user": 7945.82, "iowait": 0.0, - "system": 2919.84, - "user": 9394.94}, + "system": 3044.16, + "user": 9792.08}, "gids": {"effective": 1000, "real": 1000, "saved": 1000}, - "io_counters": [3660247040, 7034068992, 0, 0, 0], + "io_counters": [4175133696, 7454736384, 0, 0, 0], "key": "pid", - "memory_info": {"data": 1652645888, + "memory_info": {"data": 1669996544, "dirty": 0, "lib": 0, - "rss": 444485632, - "shared": 120119296, + "rss": 487743488, + "shared": 100765696, "text": 839680, - "vms": 14011539456}, - "memory_percent": 5.681366623194878, + "vms": 13926277120}, + "memory_percent": 6.234283796610667, "name": "firefox", "nice": 0, - "num_threads": 170, + "num_threads": 175, "pid": 7992, "status": "S", "time_since_update": 1, @@ -1216,34 +1219,34 @@ GET stats history History of a plugin:: # curl http://localhost:61208/api/4/cpu/history - {"system": [["2024-03-16T16:55:39.007658", 6.9], - ["2024-03-16T16:55:40.064874", 6.9], - ["2024-03-16T16:55:41.655316", 8.1]], - "user": [["2024-03-16T16:55:39.007640", 20.1], - ["2024-03-16T16:55:40.064843", 20.1], - ["2024-03-16T16:55:41.655297", 18.6]]} + {"system": [["2024-03-17T10:18:08.487741", 6.5], + ["2024-03-17T10:18:09.509980", 3.4], + ["2024-03-17T10:18:10.718312", 3.4]], + "user": [["2024-03-17T10:18:08.487727", 21.7], + ["2024-03-17T10:18:09.509972", 7.9], + ["2024-03-17T10:18:10.718285", 7.9]]} Limit history to last 2 values:: # curl http://localhost:61208/api/4/cpu/history/2 - {"system": [["2024-03-16T16:55:40.064874", 6.9], - ["2024-03-16T16:55:41.655316", 8.1]], - "user": [["2024-03-16T16:55:40.064843", 20.1], - ["2024-03-16T16:55:41.655297", 18.6]]} + {"system": [["2024-03-17T10:18:09.509980", 3.4], + ["2024-03-17T10:18:10.718312", 3.4]], + "user": [["2024-03-17T10:18:09.509972", 7.9], + ["2024-03-17T10:18:10.718285", 7.9]]} History for a specific field:: # curl http://localhost:61208/api/4/cpu/system/history - {"system": [["2024-03-16T16:55:36.914228", 5.3], - ["2024-03-16T16:55:39.007658", 6.9], - ["2024-03-16T16:55:40.064874", 6.9], - ["2024-03-16T16:55:41.655316", 8.1]]} + {"system": [["2024-03-17T10:18:06.895517", 6.5], + ["2024-03-17T10:18:08.487741", 6.5], + ["2024-03-17T10:18:09.509980", 3.4], + ["2024-03-17T10:18:10.718312", 3.4]]} Limit history for a specific field to last 2 values:: # curl http://localhost:61208/api/4/cpu/system/history - {"system": [["2024-03-16T16:55:40.064874", 6.9], - ["2024-03-16T16:55:41.655316", 8.1]]} + {"system": [["2024-03-17T10:18:09.509980", 3.4], + ["2024-03-17T10:18:10.718312", 3.4]]} GET limits (used for thresholds) -------------------------------- diff --git a/docs/man/glances.1 b/docs/man/glances.1 index 081c1d62..c57395da 100644 --- a/docs/man/glances.1 +++ b/docs/man/glances.1 @@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. -.TH "GLANCES" "1" "Mar 16, 2024" "4.0.0_beta01" "Glances" +.TH "GLANCES" "1" "Mar 17, 2024" "4.0.0_beta01" "Glances" .SH NAME glances \- An eye on your system .SH SYNOPSIS diff --git a/glances/events.py b/glances/events.py index 06ddc669..6658c842 100644 --- a/glances/events.py +++ b/glances/events.py @@ -12,6 +12,7 @@ import time from datetime import datetime +from glances.logger import logger from glances.processes import glances_processes, sort_stats from glances.thresholds import glances_thresholds @@ -336,42 +337,34 @@ class GlancesEvents(object): def _update_event(self, event_time, event_index, event_state, event_type, event_value, proc_list, proc_desc, global_message): """Update an event in the list""" - if event_state == "OK" or event_state == "CAREFUL": - # Reset the automatic process sort key - self.reset_process_sort() - - # Set the end of the events - end_time = event_time - if end_time - self.events_list[event_index]['begin'] >= self.min_duration: - # If event is >= min_duration seconds - self.events_list[event_index]['end'] = end_time - else: - # If event < min_duration seconds, ignore - self.events_list.remove(self.events_list[event_index]) - else: - # Update the item - - # It's an ongoing event, update the end time - self.events_list[event_index]['end'] = -1 - + if event_state in ('OK', 'CAREFUL') and self.events_list[event_index]['end'] < 0: + # Close the event + self._close_event(event_time, event_index) + elif event_state in ('OK', 'CAREFUL') and self.events_list[event_index]['end'] >= 0: + # Event is already closed, do nothing + pass + else: # event_state == "WARNING" or event_state == "CRITICAL" # Set process sort key self.set_process_sort(event_type) - # State - if event_state == "CRITICAL": - self.events_list[event_index]['state'] = event_state - # Min value + # It's an ongoing event, set the end time to -1 + self.events_list[event_index]['end'] = -1 + + # Min/Max/Sum/Count/Avergae value self.events_list[event_index]['min'] = min(self.events_list[event_index]['min'], event_value) - # Max value self.events_list[event_index]['max'] = max(self.events_list[event_index]['max'], event_value) - # Average value self.events_list[event_index]['sum'] += event_value self.events_list[event_index]['count'] += 1 self.events_list[event_index]['avg'] = self.events_list[event_index]['sum'] / self.events_list[event_index]['count'] - # TOP PROCESS LIST (only for CRITICAL ALERT) if event_state == "CRITICAL": + # Avoid to change from CRITICAL to WARNING + # If an events have reached the CRITICAL state, it can't go back to WARNING + self.events_list[event_index]['state'] = event_state + + # TOP PROCESS LIST (only for CRITICAL ALERT) events_sort_key = self.get_event_sort_key(event_type) + # Sort the current process list to retrieve the TOP 3 processes self.events_list[event_index]['top'] = [p['name'] for p in sort_stats(proc_list, events_sort_key)[0:3]] self.events_list[event_index]['sort'] = events_sort_key @@ -384,6 +377,19 @@ class GlancesEvents(object): return True + def _close_event(self, event_time, event_index): + """Close an event in the list""" + # Reset the automatic process sort key + self.reset_process_sort() + + # Set the end of the events + if event_time - self.events_list[event_index]['begin'] >= self.min_duration: + # If event is >= min_duration seconds + self.events_list[event_index]['end'] = event_time + else: + # If event < min_duration seconds, ignore + self.events_list.remove(self.events_list[event_index]) + def clean(self, critical=False): """Clean the logs list by deleting finished items. diff --git a/glances/outputs/static/js/components/plugin-alert.vue b/glances/outputs/static/js/components/plugin-alert.vue index 5eb7cabf..48a0478f 100644 --- a/glances/outputs/static/js/components/plugin-alert.vue +++ b/glances/outputs/static/js/components/plugin-alert.vue @@ -53,6 +53,7 @@ export default { alert.avg = alertalertStats.avg; alert.max = alertalertStats.max; alert.top = alertalertStats.top.join(', '); + alert.global = alertalertStats.global; if (!alert.ongoing) { const duration = alert.end - alert.begin; diff --git a/glances/outputs/static/public/glances.js b/glances/outputs/static/public/glances.js index 220bf9ca..5ecc180a 100644 --- a/glances/outputs/static/public/glances.js +++ b/glances/outputs/static/public/glances.js @@ -28,4 +28,4 @@ function n(e){return"[object Object]"===Object.prototype.toString.call(e)}Object * https://jaywcjlove.github.io/hotkeys-js * Licensed under the MIT license */ -var mo="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function bo(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function vo(e,t){for(var n=t.slice(0,t.length-1),r=0;r=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var wo={backspace:8,"⌫":8,tab:9,clear:12,enter:13,"↩":13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":mo?173:189,"=":mo?61:187,";":mo?59:186,"'":222,"[":219,"]":221,"\\":220},xo={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},_o={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},ko={16:!1,18:!1,17:!1,91:!1},So={},Co=1;Co<20;Co++)wo["f".concat(Co)]=111+Co;var To=[],Ao=!1,Eo="all",Oo=[],Io=function(e){return wo[e.toLowerCase()]||xo[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function Po(e){Eo=e||"all"}function No(){return Eo||"all"}var Lo=function(e){var t=e.key,n=e.scope,r=e.method,i=e.splitKey,s=void 0===i?"+":i;yo(t).forEach((function(e){var t=e.split(s),i=t.length,o=t[i-1],a="*"===o?"*":Io(o);if(So[a]){n||(n=No());var l=i>1?vo(xo,t):[];So[a]=So[a].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,i=!0,s=0;s0,ko)Object.prototype.hasOwnProperty.call(ko,s)&&(!ko[s]&&t.mods.indexOf(+s)>-1||ko[s]&&-1===t.mods.indexOf(+s))&&(i=!1);(0!==t.mods.length||ko[16]||ko[18]||ko[17]||ko[91])&&!i&&"*"!==t.shortcut||(t.keys=[],t.keys=t.keys.concat(To),!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0)))}}function Mo(e,t){var n=So["*"],r=e.keyCode||e.which||e.charCode;if(jo.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===To.indexOf(r)&&229!==r&&To.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=_o[t];e[t]&&-1===To.indexOf(n)?To.push(n):!e[t]&&To.indexOf(n)>-1?To.splice(To.indexOf(n),1):"metaKey"===t&&e[t]&&3===To.length&&(e.ctrlKey||e.shiftKey||e.altKey||(To=To.slice(To.indexOf(n))))})),r in ko){for(var i in ko[r]=!0,xo)xo[i]===r&&(jo[i]=!0);if(!n)return}for(var s in ko)Object.prototype.hasOwnProperty.call(ko,s)&&(ko[s]=e[_o[s]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===To.indexOf(17)&&To.push(17),-1===To.indexOf(18)&&To.push(18),ko[17]=!0,ko[18]=!0);var o=No();if(n)for(var a=0;a1&&(i=vo(xo,e)),(e="*"===(e=e[e.length-1])?"*":Io(e))in So||(So[e]=[]),So[e].push({keyup:l,keydown:c,scope:s,mods:i,shortcut:r[a],method:n,key:r[a],splitKey:u,element:o});void 0!==o&&!function(e){return Oo.indexOf(e)>-1}(o)&&window&&(Oo.push(o),bo(o,"keydown",(function(e){Mo(e,o)}),d),Ao||(Ao=!0,bo(window,"focus",(function(){To=[]}),d)),bo(o,"keyup",(function(e){Mo(e,o),function(e){var t=e.keyCode||e.which||e.charCode,n=To.indexOf(t);if(n>=0&&To.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&To.splice(0,To.length),93!==t&&224!==t||(t=91),t in ko)for(var r in ko[t]=!1,xo)xo[r]===t&&(jo[r]=!1)}(e)}),d))}var Ro={getPressedKeyString:function(){return To.map((function(e){return t=e,Object.keys(wo).find((function(e){return wo[e]===t}))||function(e){return Object.keys(xo).find((function(t){return xo[t]===e}))}(e)||String.fromCharCode(e);var t}))},setScope:Po,getScope:No,deleteScope:function(e,t){var n,r;for(var i in e||(e=No()),So)if(Object.prototype.hasOwnProperty.call(So,i))for(n=So[i],r=0;r1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(So).forEach((function(n){So[n].filter((function(n){return n.scope===t&&n.shortcut===e})).forEach((function(e){e&&e.method&&e.method()}))}))},unbind:function(e){if(void 0===e)Object.keys(So).forEach((function(e){return delete So[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&Lo(e)}));else if("object"==typeof e)e.key&&Lo(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=this.limits[e][l]){var c=l.lastIndexOf("_");return l.substring(c+1)+s}}return"ok"+s}getAlertLog(e,t,n,r){return this.getAlert(e,t,n,r,!0)}};const Ho=new class{data=void 0;init(e=60){let t;const n=()=>(Uo.status="PENDING",Promise.all([fetch("api/4/all",{method:"GET"}).then((e=>e.json())),fetch("api/4/all/views",{method:"GET"}).then((e=>e.json()))]).then((e=>{const t={stats:e[0],views:e[1],isBsd:"FreeBSD"===e[0].system.os_name,isLinux:"Linux"===e[0].system.os_name,isSunOS:"SunOS"===e[0].system.os_name,isMac:"Darwin"===e[0].system.os_name,isWindows:"Windows"===e[0].system.os_name};this.data=t,Uo.data=t,Uo.status="SUCCESS"})).catch((e=>{console.log(e),Uo.status="FAILURE"})).then((()=>{t&&clearTimeout(t),t=setTimeout(n,1e3*e)})));n(),fetch("api/4/all/limits",{method:"GET"}).then((e=>e.json())).then((e=>{$o.setLimits(e)})),fetch("api/4/args",{method:"GET"}).then((e=>e.json())).then(((e={})=>{Uo.args={...Uo.args,...e}})),fetch("api/4/config",{method:"GET"}).then((e=>e.json())).then(((e={})=>{Uo.config={...Uo.config,...e}}))}getData(){return this.data}};const Vo=new class{constructor(){this.favico=new(zo())({animation:"none"})}badge(e){this.favico.badge(e)}reset(){this.favico.reset()}},Go={key:0},Wo={class:"container-fluid"},Zo={class:"row"},Ko={class:"col-sm-12 col-lg-24"},Qo=wi("div",{class:"row"}," ",-1),Xo={class:"row"},Jo={class:"col-sm-12 col-lg-24"},Yo=wi("div",{class:"row"}," ",-1),ea={class:"divTable",style:{width:"100%"}},ta={class:"divTableBody"},na={class:"divTableRow"},ra={class:"divTableHead"},ia={class:"divTableHead"},sa={class:"divTableHead"},oa={class:"divTableHead"},aa={class:"divTableRow"},la={class:"divTableCell"},ca={class:"divTableCell"},ua={class:"divTableCell"},da={class:"divTableCell"},fa={class:"divTableRow"},pa={class:"divTableCell"},ha={class:"divTableCell"},ga={class:"divTableCell"},ma={class:"divTableCell"},ba={class:"divTableRow"},va={class:"divTableCell"},ya={class:"divTableCell"},wa={class:"divTableCell"},xa={class:"divTableCell"},_a={class:"divTableRow"},ka={class:"divTableCell"},Sa={class:"divTableCell"},Ca={class:"divTableCell"},Ta={class:"divTableCell"},Aa={class:"divTableRow"},Ea={class:"divTableCell"},Oa={class:"divTableCell"},Ia={class:"divTableCell"},Pa={class:"divTableCell"},Na={class:"divTableRow"},La={class:"divTableCell"},Da={class:"divTableCell"},Ma={class:"divTableCell"},ja={class:"divTableCell"},Ra={class:"divTableRow"},qa={class:"divTableCell"},Ba={class:"divTableCell"},Ua={class:"divTableCell"},Fa={class:"divTableCell"},za={class:"divTableRow"},$a=wi("div",{class:"divTableCell"}," ",-1),Ha={class:"divTableCell"},Va={class:"divTableCell"},Ga={class:"divTableCell"},Wa={class:"divTableRow"},Za=wi("div",{class:"divTableCell"}," ",-1),Ka={class:"divTableCell"},Qa={class:"divTableCell"},Xa={class:"divTableCell"},Ja={class:"divTableRow"},Ya=wi("div",{class:"divTableCell"}," ",-1),el={class:"divTableCell"},tl={class:"divTableCell"},nl={class:"divTableCell"},rl={class:"divTableRow"},il=wi("div",{class:"divTableCell"}," ",-1),sl={class:"divTableCell"},ol=wi("div",{class:"divTableCell"}," ",-1),al={class:"divTableCell"},ll={class:"divTableRow"},cl=wi("div",{class:"divTableCell"}," ",-1),ul={class:"divTableCell"},dl=wi("div",{class:"divTableCell"}," ",-1),fl=wi("div",{class:"divTableCell"}," ",-1),pl={class:"divTableRow"},hl=wi("div",{class:"divTableCell"}," ",-1),gl={class:"divTableCell"},ml=wi("div",{class:"divTableCell"}," ",-1),bl=wi("div",{class:"divTableCell"}," ",-1),vl={class:"divTableRow"},yl=wi("div",{class:"divTableCell"}," ",-1),wl={class:"divTableCell"},xl=wi("div",{class:"divTableCell"}," ",-1),_l=wi("div",{class:"divTableCell"}," ",-1),kl={class:"divTableRow"},Sl=wi("div",{class:"divTableCell"}," ",-1),Cl={class:"divTableCell"},Tl=wi("div",{class:"divTableCell"}," ",-1),Al=wi("div",{class:"divTableCell"}," ",-1),El={class:"divTableRow"},Ol=wi("div",{class:"divTableCell"}," ",-1),Il={class:"divTableCell"},Pl=wi("div",{class:"divTableCell"}," ",-1),Nl=wi("div",{class:"divTableCell"}," ",-1),Ll={class:"divTableRow"},Dl=wi("div",{class:"divTableCell"}," ",-1),Ml={class:"divTableCell"},jl=wi("div",{class:"divTableCell"}," ",-1),Rl=wi("div",{class:"divTableCell"}," ",-1),ql={class:"divTableRow"},Bl=wi("div",{class:"divTableCell"}," ",-1),Ul={class:"divTableCell"},Fl=wi("div",{class:"divTableCell"}," ",-1),zl=wi("div",{class:"divTableCell"}," ",-1),$l={class:"divTableRow"},Hl=wi("div",{class:"divTableCell"}," ",-1),Vl={class:"divTableCell"},Gl=wi("div",{class:"divTableCell"}," ",-1),Wl=wi("div",{class:"divTableCell"}," ",-1),Zl={class:"divTableRow"},Kl=wi("div",{class:"divTableCell"}," ",-1),Ql={class:"divTableCell"},Xl=wi("div",{class:"divTableCell"}," ",-1),Jl=wi("div",{class:"divTableCell"}," ",-1),Yl=wi("div",null,[wi("p",null,[Si(" For an exhaustive list of key bindings, "),wi("a",{href:"https://glances.readthedocs.io/en/latest/cmds.html#interactive-commands"},"click here"),Si(". ")])],-1),ec=wi("div",null,[wi("p",null,[Si("Press "),wi("b",null,"h"),Si(" to came back to Glances.")])],-1);const tc={data:()=>({help:void 0}),mounted(){fetch("api/4/help",{method:"GET"}).then((e=>e.json())).then((e=>this.help=e))}};var nc=n(3744);const rc=(0,nc.Z)(tc,[["render",function(e,t,n,r,i,s){return i.help?(li(),pi("div",Go,[wi("div",Wo,[wi("div",Zo,[wi("div",Ko,pe(i.help.version)+" "+pe(i.help.psutil_version),1)]),Qo,wi("div",Xo,[wi("div",Jo,pe(i.help.configuration_file),1)]),Yo]),wi("div",ea,[wi("div",ta,[wi("div",na,[wi("div",ra,pe(i.help.header_sort.replace(":","")),1),wi("div",ia,pe(i.help.header_show_hide.replace(":","")),1),wi("div",sa,pe(i.help.header_toggle.replace(":","")),1),wi("div",oa,pe(i.help.header_miscellaneous.replace(":","")),1)]),wi("div",aa,[wi("div",la,pe(i.help.sort_auto),1),wi("div",ca,pe(i.help.show_hide_application_monitoring),1),wi("div",ua,pe(i.help.toggle_bits_bytes),1),wi("div",da,pe(i.help.misc_erase_process_filter),1)]),wi("div",fa,[wi("div",pa,pe(i.help.sort_cpu),1),wi("div",ha,pe(i.help.show_hide_diskio),1),wi("div",ga,pe(i.help.toggle_count_rate),1),wi("div",ma,pe(i.help.misc_generate_history_graphs),1)]),wi("div",ba,[wi("div",va,pe(i.help.sort_io_rate),1),wi("div",ya,pe(i.help.show_hide_containers),1),wi("div",wa,pe(i.help.toggle_used_free),1),wi("div",xa,pe(i.help.misc_help),1)]),wi("div",_a,[wi("div",ka,pe(i.help.sort_mem),1),wi("div",Sa,pe(i.help.show_hide_top_extended_stats),1),wi("div",Ca,pe(i.help.toggle_bar_sparkline),1),wi("div",Ta,pe(i.help.misc_accumulate_processes_by_program),1)]),wi("div",Aa,[wi("div",Ea,pe(i.help.sort_process_name),1),wi("div",Oa,pe(i.help.show_hide_filesystem),1),wi("div",Ia,pe(i.help.toggle_separate_combined),1),wi("div",Pa,pe(i.help.misc_kill_process)+" - N/A in WebUI ",1)]),wi("div",Na,[wi("div",La,pe(i.help.sort_cpu_times),1),wi("div",Da,pe(i.help.show_hide_gpu),1),wi("div",Ma,pe(i.help.toggle_live_cumulative),1),wi("div",ja,pe(i.help.misc_reset_processes_summary_min_max),1)]),wi("div",Ra,[wi("div",qa,pe(i.help.sort_user),1),wi("div",Ba,pe(i.help.show_hide_ip),1),wi("div",Ua,pe(i.help.toggle_linux_percentage),1),wi("div",Fa,pe(i.help.misc_quit),1)]),wi("div",za,[$a,wi("div",Ha,pe(i.help.show_hide_tcp_connection),1),wi("div",Va,pe(i.help.toggle_cpu_individual_combined),1),wi("div",Ga,pe(i.help.misc_reset_history),1)]),wi("div",Wa,[Za,wi("div",Ka,pe(i.help.show_hide_alert),1),wi("div",Qa,pe(i.help.toggle_gpu_individual_combined),1),wi("div",Xa,pe(i.help.misc_delete_warning_alerts),1)]),wi("div",Ja,[Ya,wi("div",el,pe(i.help.show_hide_network),1),wi("div",tl,pe(i.help.toggle_short_full),1),wi("div",nl,pe(i.help.misc_delete_warning_and_critical_alerts),1)]),wi("div",rl,[il,wi("div",sl,pe(i.help.sort_cpu_times),1),ol,wi("div",al,pe(i.help.misc_edit_process_filter_pattern)+" - N/A in WebUI ",1)]),wi("div",ll,[cl,wi("div",ul,pe(i.help.show_hide_irq),1),dl,fl]),wi("div",pl,[hl,wi("div",gl,pe(i.help.show_hide_raid_plugin),1),ml,bl]),wi("div",vl,[yl,wi("div",wl,pe(i.help.show_hide_sensors),1),xl,_l]),wi("div",kl,[Sl,wi("div",Cl,pe(i.help.show_hide_wifi_module),1),Tl,Al]),wi("div",El,[Ol,wi("div",Il,pe(i.help.show_hide_processes),1),Pl,Nl]),wi("div",Ll,[Dl,wi("div",Ml,pe(i.help.show_hide_left_sidebar),1),jl,Rl]),wi("div",ql,[Bl,wi("div",Ul,pe(i.help.show_hide_quick_look),1),Fl,zl]),wi("div",$l,[Hl,wi("div",Vl,pe(i.help.show_hide_cpu_mem_swap),1),Gl,Wl]),wi("div",Zl,[Kl,wi("div",Ql,pe(i.help.show_hide_all),1),Xl,Jl])])]),Yl,ec])):Ti("v-if",!0)}]]),ic={class:"plugin"},sc={id:"alerts"},oc={key:0,class:"title"},ac={key:1,class:"title"},lc={id:"alert"},cc={class:"table"},uc={class:"table-cell text-left"};var dc=n(6486);const fc={props:{data:{type:Object}},computed:{stats(){return this.data.stats.alert},alerts(){return(this.stats||[]).map((e=>{const t={};var n=(new Date).getTimezoneOffset();if(t.state=e.state,t.type=e.type,t.begin=1e3*e.begin-60*n*1e3,t.end=1e3*e.end-60*n*1e3,t.ongoing=-1==e.end,t.min=e.min,t.avg=e.avg,t.max=e.max,t.top=e.top.join(", "),!t.ongoing){const e=t.end-t.begin,n=parseInt(e/1e3%60),r=parseInt(e/6e4%60),i=parseInt(e/36e5%24);t.duration=(0,dc.padStart)(i,2,"0")+":"+(0,dc.padStart)(r,2,"0")+":"+(0,dc.padStart)(n,2,"0")}return t}))},hasAlerts(){return this.countAlerts>0},countAlerts(){return this.alerts.length},hasOngoingAlerts(){return this.countOngoingAlerts>0},countOngoingAlerts(){return this.alerts.filter((({ongoing:e})=>e)).length}},watch:{countOngoingAlerts(){this.countOngoingAlerts?Vo.badge(this.countOngoingAlerts):Vo.reset()}},methods:{formatDate:e=>new Date(e).toISOString().slice(0,19).replace(/[^\d-:]/," ")}},pc=(0,nc.Z)(fc,[["render",function(e,t,n,r,i,s){return li(),pi("div",ic,[wi("section",sc,[s.hasAlerts?(li(),pi("span",oc," Warning or critical alerts (last "+pe(s.countAlerts)+" entries) ",1)):(li(),pi("span",ac,"No warning or critical alert detected"))]),wi("section",lc,[wi("div",cc,[(li(!0),pi(ni,null,pr(s.alerts,((t,n)=>(li(),pi("div",{class:"table-row",key:n},[wi("div",uc,[Si(pe(s.formatDate(t.begin))+" "+pe(t.tz)+" ("+pe(t.ongoing?"ongoing":t.duration)+") - ",1),On(wi("span",null,pe(t.state)+" on ",513),[[Ds,!t.ongoing]]),wi("span",{class:ce(t.state.toLowerCase())},pe(t.type),3),Si(" ("+pe(e.$filters.number(t.max,1))+") "+pe(t.top),1)])])))),128))])])])}]]),hc={key:0,id:"cloud",class:"plugin"},gc={class:"title"};const mc={props:{data:{type:Object}},computed:{stats(){return this.data.stats.cloud},provider(){return void 0!==this.stats.id?`${stats.platform}`:null},instance(){const{stats:e}=this;return void 0!==this.stats.id?`${e.type} instance ${e.name} (${e.region})`:null}}},bc=(0,nc.Z)(mc,[["render",function(e,t,n,r,i,s){return s.instance||s.provider?(li(),pi("section",hc,[wi("span",gc,pe(s.provider),1),Si(" "+pe(s.instance),1)])):Ti("v-if",!0)}]]),vc={class:"plugin",id:"connections"},yc=wi("div",{class:"table-row"},[wi("div",{class:"table-cell text-left title"},"TCP CONNECTIONS"),wi("div",{class:"table-cell"})],-1),wc={class:"table-row"},xc=wi("div",{class:"table-cell text-left"},"Listen",-1),_c=wi("div",{class:"table-cell"},null,-1),kc={class:"table-cell"},Sc={class:"table-row"},Cc=wi("div",{class:"table-cell text-left"},"Initiated",-1),Tc=wi("div",{class:"table-cell"},null,-1),Ac={class:"table-cell"},Ec={class:"table-row"},Oc=wi("div",{class:"table-cell text-left"},"Established",-1),Ic=wi("div",{class:"table-cell"},null,-1),Pc={class:"table-cell"},Nc={class:"table-row"},Lc=wi("div",{class:"table-cell text-left"},"Terminated",-1),Dc=wi("div",{class:"table-cell"},null,-1),Mc={class:"table-cell"},jc={class:"table-row"},Rc=wi("div",{class:"table-cell text-left"},"Tracked",-1),qc=wi("div",{class:"table-cell"},null,-1);const Bc={props:{data:{type:Object}},computed:{stats(){return this.data.stats.connections},view(){return this.data.views.connections},listen(){return this.stats.LISTEN},initiated(){return this.stats.initiated},established(){return this.stats.ESTABLISHED},terminated(){return this.stats.terminated},tracked(){return{count:this.stats.nf_conntrack_count,max:this.stats.nf_conntrack_max}}},methods:{getDecoration(e){if(void 0!==this.view[e])return this.view[e].decoration.toLowerCase()}}},Uc=(0,nc.Z)(Bc,[["render",function(e,t,n,r,i,s){return li(),pi("section",vc,[yc,wi("div",wc,[xc,_c,wi("div",kc,pe(s.listen),1)]),wi("div",Sc,[Cc,Tc,wi("div",Ac,pe(s.initiated),1)]),wi("div",Ec,[Oc,Ic,wi("div",Pc,pe(s.established),1)]),wi("div",Nc,[Lc,Dc,wi("div",Mc,pe(s.terminated),1)]),wi("div",jc,[Rc,qc,wi("div",{class:ce(["table-cell",s.getDecoration("nf_conntrack_percent")])},pe(s.tracked.count)+"/"+pe(s.tracked.max),3)])])}]]),Fc={id:"cpu",class:"plugin"},zc={class:"row"},$c={class:"col-sm-24 col-md-12 col-lg-8"},Hc={class:"table"},Vc={class:"table-row"},Gc=wi("div",{class:"table-cell text-left title"},"CPU",-1),Wc={class:"table-row"},Zc=wi("div",{class:"table-cell text-left"},"user:",-1),Kc={class:"table-row"},Qc=wi("div",{class:"table-cell text-left"},"system:",-1),Xc={class:"table-row"},Jc=wi("div",{class:"table-cell text-left"},"iowait:",-1),Yc={class:"table-row"},eu=wi("div",{class:"table-cell text-left"},"dpc:",-1),tu={class:"hidden-xs hidden-sm col-md-12 col-lg-8"},nu={class:"table"},ru={class:"table-row"},iu=wi("div",{class:"table-cell text-left"},"idle:",-1),su={class:"table-cell"},ou={class:"table-row"},au=wi("div",{class:"table-cell text-left"},"irq:",-1),lu={class:"table-cell"},cu={class:"table-row"},uu=wi("div",{class:"table-cell text-left"},"inter:",-1),du={class:"table-cell"},fu={class:"table-row"},pu=wi("div",{class:"table-cell text-left"},"nice:",-1),hu={class:"table-cell"},gu={key:0,class:"table-row"},mu=wi("div",{class:"table-cell text-left"},"ctx_sw:",-1),bu={class:"table-row"},vu=wi("div",{class:"table-cell text-left"},"steal:",-1),yu={key:1,class:"table-row"},wu=wi("div",{class:"table-cell text-left"},"syscal:",-1),xu={class:"table-cell"},_u={class:"hidden-xs hidden-sm hidden-md col-lg-8"},ku={class:"table"},Su={key:0,class:"table-row"},Cu=wi("div",{class:"table-cell text-left"},"ctx_sw:",-1),Tu={key:1,class:"table-row"},Au=wi("div",{class:"table-cell text-left"},"inter:",-1),Eu={class:"table-cell"},Ou={key:2,class:"table-row"},Iu=wi("div",{class:"table-cell text-left"},"sw_int:",-1),Pu={class:"table-cell"},Nu={key:3,class:"table-row"},Lu=wi("div",{class:"table-cell text-left"},"guest:",-1),Du={class:"table-cell"};const Mu={props:{data:{type:Object}},computed:{stats(){return this.data.stats.cpu},view(){return this.data.views.cpu},isLinux(){return this.data.isLinux},isSunOS(){return this.data.isSunOS},isWindows(){return this.data.isWindows},total(){return this.stats.total},user(){return this.stats.user},system(){return this.stats.system},idle(){return this.stats.idle},nice(){return this.stats.nice},irq(){return this.stats.irq},iowait(){return this.stats.iowait},dpc(){return this.stats.dpc},steal(){return this.stats.steal},guest(){return this.stats.guest},ctx_switches(){const{stats:e}=this;return e.ctx_switches?Math.floor(e.ctx_switches/e.time_since_update):null},interrupts(){const{stats:e}=this;return e.interrupts?Math.floor(e.interrupts/e.time_since_update):null},soft_interrupts(){const{stats:e}=this;return e.soft_interrupts?Math.floor(e.soft_interrupts/e.time_since_update):null},syscalls(){const{stats:e}=this;return e.syscalls?Math.floor(e.syscalls/e.time_since_update):null}},methods:{getDecoration(e){if(void 0!==this.view[e])return this.view[e].decoration.toLowerCase()}}},ju=(0,nc.Z)(Mu,[["render",function(e,t,n,r,i,s){return li(),pi("section",Fc,[wi("div",zc,[wi("div",$c,[wi("div",Hc,[wi("div",Vc,[Gc,wi("div",{class:ce(["table-cell",s.getDecoration("total")])},pe(s.total)+"%",3)]),wi("div",Wc,[Zc,wi("div",{class:ce(["table-cell",s.getDecoration("user")])},pe(s.user)+"%",3)]),wi("div",Kc,[Qc,wi("div",{class:ce(["table-cell",s.getDecoration("system")])},pe(s.system)+"%",3)]),On(wi("div",Xc,[Jc,wi("div",{class:ce(["table-cell",s.getDecoration("iowait")])},pe(s.iowait)+"%",3)],512),[[Ds,null!=s.iowait]]),On(wi("div",Yc,[eu,wi("div",{class:ce(["table-cell",s.getDecoration("dpc")])},pe(s.dpc)+"%",3)],512),[[Ds,null==s.iowait&&null!=s.dpc]])])]),wi("div",tu,[wi("div",nu,[wi("div",ru,[iu,wi("div",su,pe(s.idle)+"%",1)]),On(wi("div",ou,[au,wi("div",lu,pe(s.irq)+"%",1)],512),[[Ds,null!=s.irq]]),Ti(" If no irq, display interrupts "),On(wi("div",cu,[uu,wi("div",du,pe(s.interrupts),1)],512),[[Ds,null==s.irq]]),On(wi("div",fu,[pu,wi("div",hu,pe(s.nice)+"%",1)],512),[[Ds,null!=s.nice]]),Ti(" If no nice, display ctx_switches "),null==s.nice&&null!=s.ctx_switches?(li(),pi("div",gu,[mu,wi("div",{class:ce(["table-cell",s.getDecoration("ctx_switches")])},pe(s.ctx_switches),3)])):Ti("v-if",!0),On(wi("div",bu,[vu,wi("div",{class:ce(["table-cell",s.getDecoration("steal")])},pe(s.steal)+"%",3)],512),[[Ds,null!=s.steal]]),s.isLinux||null==s.syscalls?Ti("v-if",!0):(li(),pi("div",yu,[wu,wi("div",xu,pe(s.syscalls),1)]))])]),wi("div",_u,[wi("div",ku,[Ti(" If not already display instead of nice, then display ctx_switches "),null!=s.nice&&null!=s.ctx_switches?(li(),pi("div",Su,[Cu,wi("div",{class:ce(["table-cell",s.getDecoration("ctx_switches")])},pe(s.ctx_switches),3)])):Ti("v-if",!0),Ti(" If not already display instead of irq, then display interrupts "),null!=s.irq&&null!=s.interrupts?(li(),pi("div",Tu,[Au,wi("div",Eu,pe(s.interrupts),1)])):Ti("v-if",!0),s.isWindows||s.isSunOS||null==s.soft_interrupts?Ti("v-if",!0):(li(),pi("div",Ou,[Iu,wi("div",Pu,pe(s.soft_interrupts),1)])),s.isLinux&&null!=s.guest?(li(),pi("div",Nu,[Lu,wi("div",Du,pe(s.guest)+"%",1)])):Ti("v-if",!0)])])])])}]]),Ru={class:"plugin",id:"diskio"},qu={key:0,class:"table-row"},Bu=wi("div",{class:"table-cell text-left title"},"DISK I/O",-1),Uu={class:"table-cell"},Fu={class:"table-cell"},zu={class:"table-cell"},$u={class:"table-cell"},Hu={class:"table-cell text-left"};var Vu=n(1036),Gu=n.n(Vu);function Wu(e,t){return Zu(e=8*Math.round(e),t)+"b"}function Zu(e,t){if(t=t||!1,isNaN(parseFloat(e))||!isFinite(e)||0==e)return e;const n=["Y","Z","E","P","T","G","M","K"],r={Y:12089258196146292e8,Z:11805916207174113e5,E:0x1000000000000000,P:0x4000000000000,T:1099511627776,G:1073741824,M:1048576,K:1024};for(var i=0;i1){var a=0;return o<10?a=2:o<100&&(a=1),t?a="MK"==s?0:(0,dc.min)([1,a]):"K"==s&&(a=0),parseFloat(o).toFixed(a)+s}}return e.toFixed(0)}function Ku(e){return void 0===e||""===e?"?":e}function Qu(e,t,n){return t=t||0,n=n||" ",String(e).padStart(t,n)}function Xu(e,t){return"function"!=typeof e.slice&&(e=String(e)),e.slice(0,t)}function Ju(e,t,n=!0){return t=t||8,e.length>t?n?e.substring(0,t-1)+"_":"_"+e.substring(e.length-t+1):e}function Yu(e){if(void 0===e)return e;var t=function(e){var t=document.createElement("div");return t.innerText=e,t.innerHTML}(e),n=t.replace(/\n/g,"
");return Gu()(n)}function ed(e,t){return new Intl.NumberFormat(void 0,"number"==typeof t?{maximumFractionDigits:t}:t).format(e)}function td(e){for(var t=0,n=0;n({store:Uo}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.diskio},disks(){const e=this.stats.map((e=>{const t=e.time_since_update;return{name:e.disk_name,bitrate:{txps:Zu(e.read_bytes/t),rxps:Zu(e.write_bytes/t)},count:{txps:Zu(e.read_count/t),rxps:Zu(e.write_count/t)},alias:void 0!==e.alias?e.alias:null}}));return(0,dc.orderBy)(e,["name"])}}},id=(0,nc.Z)(rd,[["render",function(e,t,n,r,i,s){return li(),pi("section",Ru,[s.disks.length>0?(li(),pi("div",qu,[Bu,On(wi("div",Uu,"R/s",512),[[Ds,!s.args.diskio_iops]]),On(wi("div",Fu,"W/s",512),[[Ds,!s.args.diskio_iops]]),On(wi("div",zu,"IOR/s",512),[[Ds,s.args.diskio_iops]]),On(wi("div",$u,"IOW/s",512),[[Ds,s.args.diskio_iops]])])):Ti("v-if",!0),(li(!0),pi(ni,null,pr(s.disks,((t,n)=>(li(),pi("div",{class:"table-row",key:n},[wi("div",Hu,pe(e.$filters.minSize(t.alias?t.alias:t.name,32)),1),On(wi("div",{class:"table-cell"},pe(t.bitrate.txps),513),[[Ds,!s.args.diskio_iops]]),On(wi("div",{class:"table-cell"},pe(t.bitrate.rxps),513),[[Ds,!s.args.diskio_iops]]),On(wi("div",{class:"table-cell"},pe(t.count.txps),513),[[Ds,s.args.diskio_iops]]),On(wi("div",{class:"table-cell"},pe(t.count.rxps),513),[[Ds,s.args.diskio_iops]])])))),128))])}]]),sd={key:0,id:"containers-plugin",class:"plugin"},od=wi("span",{class:"title"},"CONTAINERS",-1),ad={class:"table"},ld={class:"table-row"},cd=wi("div",{class:"table-cell text-left"},"Engine",-1),ud=wi("div",{class:"table-cell text-left"},"Pod",-1),dd=wi("div",{class:"table-cell"},"Status",-1),fd=wi("div",{class:"table-cell"},"Uptime",-1),pd=Ci('
/MAX
IOR/s
IOW/s
RX/s
TX/s
Command
',6),hd={class:"table-cell text-left"},gd={class:"table-cell text-left"},md={class:"table-cell text-left"},bd={class:"table-cell"},vd={class:"table-cell"},yd={class:"table-cell"},wd={class:"table-cell"},xd={class:"table-cell"},_d={class:"table-cell"},kd={class:"table-cell"},Sd={class:"table-cell"},Cd={class:"table-cell text-left"};const Td={props:{data:{type:Object}},data:()=>({store:Uo,sorter:void 0}),computed:{args(){return this.store.args||{}},sortProcessesKey(){return this.args.sort_processes_key},stats(){return this.data.stats.containers},containers(){const{sorter:e}=this,t=(this.stats||[]).map((e=>({id:e.id,name:e.name,status:e.status,uptime:e.uptime,cpu_percent:e.cpu.total,memory_usage:null!=e.memory.usage?e.memory.usage:"?",limit:null!=e.memory.limit?e.memory.limit:"?",io_rx:null!=e.io_rx?e.io_rx:"?",io_wx:null!=e.io_wx?e.io_wx:"?",network_rx:null!=e.network_rx?e.network_rx:"?",network_tx:null!=e.network_tx?e.network_tx:"?",command:e.command,image:e.image,engine:e.engine,pod_id:e.pod_id})));return(0,dc.orderBy)(t,[e.column].reduce(((e,t)=>("memory_percent"===t&&(t=["memory_usage"]),e.concat(t))),[]),[e.isReverseColumn(e.column)?"desc":"asc"])}},watch:{sortProcessesKey:{immediate:!0,handler(e){e&&!["cpu_percent","memory_percent","name"].includes(e)||(this.sorter={column:this.args.sort_processes_key||"cpu_percent",auto:!this.args.sort_processes_key,isReverseColumn:function(e){return!["name"].includes(e)},getColumnLabel:function(e){return{io_counters:"disk IO",cpu_percent:"CPU consumption",memory_usage:"memory consumption",cpu_times:"uptime",name:"container name",None:"None"}[e]||e}})}}}},Ad=(0,nc.Z)(Td,[["render",function(e,t,n,r,i,s){return s.containers.length?(li(),pi("section",sd,[od,Si(" "+pe(s.containers.length)+" sorted by "+pe(i.sorter.getColumnLabel(i.sorter.column))+" ",1),wi("div",ad,[wi("div",ld,[cd,ud,wi("div",{class:ce(["table-cell text-left",["sortable","name"===i.sorter.column&&"sort"]]),onClick:t[0]||(t[0]=e=>s.args.sort_processes_key="name")}," Name ",2),dd,fd,wi("div",{class:ce(["table-cell",["sortable","cpu_percent"===i.sorter.column&&"sort"]]),onClick:t[1]||(t[1]=e=>s.args.sort_processes_key="cpu_percent")}," CPU% ",2),wi("div",{class:ce(["table-cell",["sortable","memory_percent"===i.sorter.column&&"sort"]]),onClick:t[2]||(t[2]=e=>s.args.sort_processes_key="memory_percent")}," MEM ",2),pd]),(li(!0),pi(ni,null,pr(s.containers,((t,n)=>(li(),pi("div",{class:"table-row",key:n},[wi("div",hd,pe(t.engine),1),wi("div",gd,pe(t.pod_id||"-"),1),wi("div",md,pe(t.name),1),wi("div",{class:ce(["table-cell","Paused"==t.status?"careful":"ok"])},pe(t.status),3),wi("div",bd,pe(t.uptime),1),wi("div",vd,pe(e.$filters.number(t.cpu_percent,1)),1),wi("div",yd,pe(e.$filters.bytes(t.memory_usage)),1),wi("div",wd,pe(e.$filters.bytes(t.limit)),1),wi("div",xd,pe(e.$filters.bytes(t.io_rx)),1),wi("div",_d,pe(e.$filters.bytes(t.io_wx)),1),wi("div",kd,pe(e.$filters.bits(t.network_rx)),1),wi("div",Sd,pe(e.$filters.bits(t.network_tx)),1),wi("div",Cd,pe(t.command),1)])))),128))])])):Ti("v-if",!0)}]]),Ed={class:"plugin",id:"folders"},Od={key:0,class:"table-row"},Id=[wi("div",{class:"table-cell text-left title"},"FOLDERS",-1),wi("div",{class:"table-cell"},null,-1),wi("div",{class:"table-cell"},"Size",-1)],Pd={class:"table-cell text-left"},Nd=wi("div",{class:"table-cell"},null,-1),Ld={key:0,class:"visible-lg-inline"};const Dd={props:{data:{type:Object}},computed:{stats(){return this.data.stats.folders},folders(){return this.stats.map((e=>({path:e.path,size:e.size,errno:e.errno,careful:e.careful,warning:e.warning,critical:e.critical})))}},methods:{getDecoration:e=>e.errno>0?"error":null!==e.critical&&e.size>1e6*e.critical?"critical":null!==e.warning&&e.size>1e6*e.warning?"warning":null!==e.careful&&e.size>1e6*e.careful?"careful":"ok"}},Md=(0,nc.Z)(Dd,[["render",function(e,t,n,r,i,s){return li(),pi("section",Ed,[s.folders.length>0?(li(),pi("div",Od,Id)):Ti("v-if",!0),(li(!0),pi(ni,null,pr(s.folders,((t,n)=>(li(),pi("div",{class:"table-row",key:n},[wi("div",Pd,pe(t.path),1),Nd,wi("div",{class:ce(["table-cell",s.getDecoration(t)])},[t.errno>0?(li(),pi("span",Ld," ? ")):Ti("v-if",!0),Si(" "+pe(e.$filters.bytes(t.size)),1)],2)])))),128))])}]]),jd={class:"plugin",id:"fs"},Rd={class:"table-row"},qd=wi("div",{class:"table-cell text-left title"},"FILE SYS",-1),Bd={class:"table-cell"},Ud=wi("div",{class:"table-cell"},"Total",-1),Fd={class:"table-cell text-left"},zd={key:0,class:"visible-lg-inline"},$d={class:"table-cell"};const Hd={props:{data:{type:Object}},data:()=>({store:Uo}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.fs},view(){return this.data.views.fs},fileSystems(){const e=this.stats.map((e=>({name:e.device_name,mountPoint:e.mnt_point,percent:e.percent,size:e.size,used:e.used,free:e.free,alias:void 0!==e.alias?e.alias:null})));return(0,dc.orderBy)(e,["mnt_point"])}},methods:{getDecoration(e,t){if(null!=this.view[e][t])return this.view[e][t].decoration.toLowerCase()}}},Vd=(0,nc.Z)(Hd,[["render",function(e,t,n,r,i,s){return li(),pi("section",jd,[wi("div",Rd,[qd,wi("div",Bd,[On(wi("span",null,"Used",512),[[Ds,!s.args.fs_free_space]]),On(wi("span",null,"Free",512),[[Ds,s.args.fs_free_space]])]),Ud]),(li(!0),pi(ni,null,pr(s.fileSystems,((t,n)=>(li(),pi("div",{class:"table-row",key:n},[wi("div",Fd,[Si(pe(e.$filters.minSize(t.alias?t.alias:t.mountPoint,36,e.begin=!1))+" ",1),(t.alias?t.alias:t.mountPoint).length+t.name.length<=34?(li(),pi("span",zd," ("+pe(t.name)+") ",1)):Ti("v-if",!0)]),wi("div",{class:ce(["table-cell",s.getDecoration(t.mountPoint,"used")])},[On(wi("span",null,pe(e.$filters.bytes(t.used)),513),[[Ds,!s.args.fs_free_space]]),On(wi("span",null,pe(e.$filters.bytes(t.free)),513),[[Ds,s.args.fs_free_space]])],2),wi("div",$d,pe(e.$filters.bytes(t.size)),1)])))),128))])}]]),Gd={id:"gpu",class:"plugin"},Wd={class:"gpu-name title"},Zd={class:"table"},Kd={key:0,class:"table-row"},Qd=wi("div",{class:"table-cell text-left"},"proc:",-1),Xd={key:1,class:"table-cell"},Jd={key:1,class:"table-row"},Yd=wi("div",{class:"table-cell text-left"},"mem:",-1),ef={key:1,class:"table-cell"},tf={key:2,class:"table-row"},nf=wi("div",{class:"table-cell text-left"},"temperature:",-1),rf={key:1,class:"table-cell"},sf={class:"table-cell text-left"},of={key:1},af={key:3},lf={key:5};const cf={props:{data:{type:Object}},data:()=>({store:Uo}),computed:{args(){return this.store.args||{}},stats(){return this.data.stats.gpu},view(){return this.data.views.gpu},gpus(){return this.stats},name(){let e="GPU";const{stats:t}=this;return 1===t.length?e=t[0].name:t.length&&(e=`${t.length} GPU ${t[0].name}`),e},mean(){const e={proc:null,mem:null,temperature:null},{stats:t}=this;if(!t.length)return e;for(let n of t)e.proc+=n.proc,e.mem+=n.mem,e.temperature+=n.temperature;return e.proc=e.proc/t.length,e.mem=e.mem/t.length,e.temperature=e.temperature/t.length,e}},methods:{getDecoration(e,t){if(void 0!==this.view[e][t])return this.view[e][t].decoration.toLowerCase()},getMeanDecoration(e){return this.getDecoration(0,e)}}},uf=(0,nc.Z)(cf,[["render",function(e,t,n,r,i,s){return li(),pi("section",Gd,[wi("div",Wd,pe(s.name),1),wi("div",Zd,[s.args.meangpu||1===s.gpus.length?(li(),pi("div",Kd,[Qd,null!=s.mean.proc?(li(),pi("div",{key:0,class:ce(["table-cell",s.getMeanDecoration("proc")])},pe(e.$filters.number(s.mean.proc,0))+"% ",3)):Ti("v-if",!0),null==s.mean.proc?(li(),pi("div",Xd,"N/A")):Ti("v-if",!0)])):Ti("v-if",!0),s.args.meangpu||1===s.gpus.length?(li(),pi("div",Jd,[Yd,null!=s.mean.mem?(li(),pi("div",{key:0,class:ce(["table-cell",s.getMeanDecoration("mem")])},pe(e.$filters.number(s.mean.mem,0))+"% ",3)):Ti("v-if",!0),null==s.mean.mem?(li(),pi("div",ef,"N/A")):Ti("v-if",!0)])):Ti("v-if",!0),s.args.meangpu||1===s.gpus.length?(li(),pi("div",tf,[nf,null!=s.mean.temperature?(li(),pi("div",{key:0,class:ce(["table-cell",s.getMeanDecoration("temperature")])},pe(e.$filters.number(s.mean.temperature,0))+"° ",3)):Ti("v-if",!0),null==s.mean.temperature?(li(),pi("div",rf,"N/A")):Ti("v-if",!0)])):Ti("v-if",!0),!s.args.meangpu&&s.gpus.length>1?(li(!0),pi(ni,{key:3},pr(s.gpus,((t,n)=>(li(),pi("div",{class:"table-row",key:n},[wi("div",sf,[Si(pe(t.gpu_id)+": ",1),null!=t.proc?(li(),pi("span",{key:0,class:ce(s.getDecoration(t.gpu_id,"proc"))},pe(e.$filters.number(t.proc,0))+"% ",3)):Ti("v-if",!0),null==t.proc?(li(),pi("span",of,"N/A")):Ti("v-if",!0),Si(" mem: "),null!=t.mem?(li(),pi("span",{key:2,class:ce(s.getDecoration(t.gpu_id,"mem"))},pe(e.$filters.number(t.mem,0))+"% ",3)):Ti("v-if",!0),null==t.mem?(li(),pi("span",af,"N/A")):Ti("v-if",!0),Si(" temp: "),null!=t.temperature?(li(),pi("span",{key:4,class:ce(s.getDecoration(t.gpu_id,"temperature"))},pe(e.$filters.number(t.temperature,0))+"C ",3)):Ti("v-if",!0),null==t.temperature?(li(),pi("span",lf,"N/A")):Ti("v-if",!0)])])))),128)):Ti("v-if",!0)])])}]]),df={key:0,class:"plugin",id:"ip"},ff={key:0,class:"title"},pf={key:1},hf={key:2,class:"title"},gf={key:3},mf={key:4};const bf={props:{data:{type:Object}},computed:{ipStats(){return this.data.stats.ip},address(){return this.ipStats.address},gateway(){return this.ipStats.gateway},maskCdir(){return this.ipStats.mask_cidr},publicAddress(){return this.ipStats.public_address},publicInfo(){return this.ipStats.public_info_human}}},vf=(0,nc.Z)(bf,[["render",function(e,t,n,r,i,s){return null!=s.address?(li(),pi("section",df,[null!=s.address?(li(),pi("span",ff,"IP")):Ti("v-if",!0),null!=s.address?(li(),pi("span",pf,pe(s.address)+"/"+pe(s.maskCdir),1)):Ti("v-if",!0),null!=s.publicAddress?(li(),pi("span",hf,"Pub")):Ti("v-if",!0),null!=s.publicAddress?(li(),pi("span",gf,pe(s.publicAddress),1)):Ti("v-if",!0),null!=s.publicInfo?(li(),pi("span",mf,pe(s.publicInfo),1)):Ti("v-if",!0)])):Ti("v-if",!0)}]]),yf={class:"plugin",id:"irq"},wf={key:0,class:"table-row"},xf=[wi("div",{class:"table-cell text-left title"},"IRQ",-1),wi("div",{class:"table-cell"},null,-1),wi("div",{class:"table-cell"},"Rate/s",-1)],_f={class:"table-cell text-left"},kf=wi("div",{clas