diff --git a/src/opnsense/mvc/app/controllers/OPNsense/OpenVPN/Api/ServiceController.php b/src/opnsense/mvc/app/controllers/OPNsense/OpenVPN/Api/ServiceController.php index b723181ed..f5a2dbc8f 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/OpenVPN/Api/ServiceController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/OpenVPN/Api/ServiceController.php @@ -75,7 +75,6 @@ class ServiceController extends ApiControllerBase $stats['type'] = $role; $stats['id'] = $idx; $stats['description'] = ''; - $stats['connected_since'] = null; if (!empty($stats['timestamp'])) { $stats['connected_since'] = date('Y-m-d H:i:s', $stats['timestamp']); } @@ -102,12 +101,22 @@ class ServiceController extends ApiControllerBase 'service_id' => "openvpn/" . $idx, 'type' => $role, 'description' => (string)$cnf->description ?? '', - 'connected_since' => null, - 'status' => null ]; } } } + // make sure all records contain the same amount of keys to prevent sorting issues. + $all_keys = []; + foreach ($records as $record) { + $all_keys = array_unique(array_merge(array_keys($record), $all_keys)); + } + foreach ($records as &$record) { + foreach ($all_keys as $key) { + if (!isset($record[$key])) { + $record[$key] = null; + } + } + } return $this->searchRecordsetBase($records); } diff --git a/src/opnsense/mvc/app/views/OPNsense/OpenVPN/status.volt b/src/opnsense/mvc/app/views/OPNsense/OpenVPN/status.volt index d476fcd68..f6dbf62d0 100644 --- a/src/opnsense/mvc/app/views/OPNsense/OpenVPN/status.volt +++ b/src/opnsense/mvc/app/views/OPNsense/OpenVPN/status.volt @@ -33,6 +33,12 @@ options:{ selection: false, formatters:{ + bytes: function(column, row) { + if (row[column.id]) { + return byteFormat(row[column.id], 2); + } + return ''; + }, commands: function (column, row) { if (row.is_client) { return ''; @@ -131,8 +137,8 @@