Squashed commit of the following:

commit 8a3fd0057817836c0f0baaa28123b61ccd8b39fd
Author: Ad Schellevis <ad@opnsense.org>
Date:   Sat Oct 16 14:24:12 2021 +0200

    system activity: show all threads and correct WCPU, minor cleanups for https://github.com/opnsense/core/pull/5277

commit a2e3ad0b5e971b48687fc6f1291e420ad4caef6e
Author: Franco Fichtner <franco@opnsense.org>
Date:   Fri Oct 15 07:55:23 2021 +0200

    interfaces: style update in previous

commit 5ab238d32e4a3f5bdebf1e0d0786672636c1fc2b
Author: Jason Crowley <65243090+jasonpcrowley@users.noreply.github.com>
Date:   Thu Oct 14 14:23:40 2021 -0500

    Updated guess_interface_from_ip to more accurately identify the interface using the subnet with the largest mask in the route table. (#5281)

commit c87a39efd6833ae091f47e0faec6f9d5b1a937f6
Author: Franco Fichtner <franco@opnsense.org>
Date:   Thu Oct 14 14:49:11 2021 +0200

    firmware: in case of fs integrity issues try not to break upgrades

    File is always packaged, but we cannot trust the file system.

commit cd0e482fc24183918e5a49b8b9c0d28f80d40274
Author: Franco Fichtner <franco@opnsense.org>
Date:   Thu Oct 14 11:11:37 2021 +0200

    interfaces: undo restricting lookups to configured interfaces only

    In practice call stack above get_interface_ip*() is too messy and
    this will likely break a number of lookups.

commit d9831296220e65aefaa375f9a06b91b995c001f6
Author: Ad Schellevis <ad@opnsense.org>
Date:   Thu Oct 14 10:56:42 2021 +0200

    IPSec - VTI, ignore tunnel devices if local or remote endpoint can't be found.

commit 680f189fe5db2d6074bb2786e9b6b2df5c2ddb23
Author: kulikov-a <36099472+kulikov-a@users.noreply.github.com>
Date:   Thu Oct 14 22:44:49 2021 +0300

    toggle 'top' to tid. get pid from 'procstat'

commit 355a337486bbc8a68cd193d091588119b4563b7f
Author: kulikov-a <36099472+kulikov-a@users.noreply.github.com>
Date:   Thu Oct 14 22:38:15 2021 +0300

    add tid column and make it key

commit efacc976e2b691798dfbccacf62e15d8bc657ef4
Author: kulikov-a <36099472+kulikov-a@users.noreply.github.com>
Date:   Thu Oct 14 09:14:51 2021 +0300

    Update src/opnsense/mvc/app/views/OPNsense/Diagnostics/systemactivity.volt

    Co-authored-by: Franco Fichtner <franco@lastsummer.de>

commit c3bdf26795b9f276b1bbaa9f7355edbb8d3fa206
Author: kulikov-a <36099472+kulikov-a@users.noreply.github.com>
Date:   Wed Oct 13 22:32:03 2021 +0300

    show all threads

commit 7c98ddaea935edd6806e8febdcf021735cc38d2e
Author: kulikov-a <36099472+kulikov-a@users.noreply.github.com>
Date:   Wed Oct 13 22:28:12 2021 +0300

    request and grab second display
This commit is contained in:
Ad Schellevis 2021-10-16 14:25:35 +02:00
parent 13767617b6
commit d45eb09eed
2 changed files with 19 additions and 8 deletions

View File

@ -39,6 +39,9 @@ POSSIBILITY OF SUCH DAMAGE.
ajax: false,
selection: true,
multiSelect: true,
labels: {
noResults: "{{ lang._('Waiting for data...') }}"
}
};
if ($("#grid-top").hasClass('bootgrid-table')) {
$("#grid-top").bootgrid('clear');
@ -92,7 +95,8 @@ POSSIBILITY OF SUCH DAMAGE.
<table id="grid-top" class="table table-condensed table-hover table-striped table-responsive">
<thead>
<tr>
<th data-column-id="PID" data-type="numeric" data-identifier="true">{{ lang._('PID') }}</th>
<th data-column-id="THR" data-type="numeric" data-identifier="true" data-visible="false">{{ lang._('THR') }}</th>
<th data-column-id="PID" data-type="string">{{ lang._('PID') }}</th>
<th data-column-id="USERNAME" data-type="string" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('USERNAME') }}</th>
<th data-column-id="PRI" data-type="string" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('PRI') }}</th>
<th data-column-id="NICE" data-type="string" data-css-class="hidden-xs hidden-sm" data-header-css-class="hidden-xs hidden-sm">{{ lang._('NICE') }}</th>

View File

@ -39,9 +39,16 @@ if __name__ == '__main__':
fieldnames = None
field_max_width = dict()
result = {'headers': [], 'details': []}
sp = subprocess.run(['/usr/bin/top','-aHSn','999999'], capture_output=True, text=True)
is_header = True
for line in sp.stdout.strip().split('\n'):
tidpid = dict()
for line in subprocess.run(['/usr/bin/procstat','-ath'], capture_output=True, text=True).stdout.split('\n'):
parts = line.split(maxsplit=2)
if len(parts) > 1:
tidpid[parts[1]] = parts[0]
# grab second display so that CPU time data appears
sp = subprocess.run(['/usr/bin/top','-aHSTn','-d2','999999'], capture_output=True, text=True)
topData = sp.stdout.strip().split('\n\n',2)[-1]
for line in topData.split('\n'):
# end of header, start of top detection
if line.find('USERNAME') > -1 and line.find('COMMAND') > -1:
is_header = False
@ -52,16 +59,16 @@ if __name__ == '__main__':
else:
# parse details including fieldnames (leave original)
if fieldnames is None:
fieldnames = line.split()
fieldnames = ['PID'] + line.split()
else:
tmp = line.split()
tmp = line.split(maxsplit=10)
record = {'C': '0'}
for field_id in range(len(fieldnames)):
fieldname = fieldnames[field_id]
if field_id == len(fieldnames)-1:
record[fieldname] = ' '.join(tmp[field_id:])
if field_id == 0: # PID
record[fieldname] = tidpid[tmp[0]] if tmp[0] in tidpid else None
else:
record[fieldname] = tmp[field_id]
record[fieldname] = tmp[field_id - 1]
if fieldname not in field_max_width or field_max_width[fieldname] < len(record[fieldname]):
field_max_width[fieldname] = len(record[fieldname])