From: Marcin Haba Date: Sat, 22 Feb 2020 18:14:51 +0000 (+0100) Subject: baculum: Add copy, CSV and column visibility buttons to tables X-Git-Tag: Release-9.6.1~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c13bd0668835cd0c6eaad60342e7183ab11e376;p=thirdparty%2Fbacula.git baculum: Add copy, CSV and column visibility buttons to tables --- diff --git a/gui/baculum/protected/Web/JavaScript/misc.js b/gui/baculum/protected/Web/JavaScript/misc.js index 25521d4c0..020dff3ce 100644 --- a/gui/baculum/protected/Web/JavaScript/misc.js +++ b/gui/baculum/protected/Web/JavaScript/misc.js @@ -1106,6 +1106,17 @@ function update_job_table(table_obj, new_data) { } } +/** + * Used to escape values before putting them into regular expression. + * Dedicated to use in table values. + */ +dtEscapeRegex = function(value) { + if (typeof(value) != 'string' && typeof(value.toString) == 'function') { + value = value.toString(); + } + return $.fn.dataTable.util.escapeRegex(value); +}; + $(function() { W3SideBar.init(); set_sbbr_compatibility(); diff --git a/gui/baculum/protected/Web/Lang/en/messages.mo b/gui/baculum/protected/Web/Lang/en/messages.mo index 916d3f1bb..f07a72705 100644 Binary files a/gui/baculum/protected/Web/Lang/en/messages.mo and b/gui/baculum/protected/Web/Lang/en/messages.mo differ diff --git a/gui/baculum/protected/Web/Lang/en/messages.po b/gui/baculum/protected/Web/Lang/en/messages.po index f78bc5b36..154e18560 100644 --- a/gui/baculum/protected/Web/Lang/en/messages.po +++ b/gui/baculum/protected/Web/Lang/en/messages.po @@ -2524,3 +2524,93 @@ msgstr "Create new resource" msgid "The resource has been created successfully." msgstr "The resource has been created successfully." + +msgid "Scheduled time" +msgstr "Scheduled time" + +msgid "Real end time" +msgstr "Real end time" + +msgid "Read bytes" +msgstr "Read bytes" + +msgid "Job errors" +msgstr "Job errors" + +msgid "Job missing files" +msgstr "Job missing files" + +msgid "Purged files" +msgstr "Purged files" + +msgid "Has base" +msgstr "Has base" + +msgid "Reviewed" +msgstr "Reviewed" + +msgid "Comment" +msgstr "Comment" + +msgid "File table" +msgstr "File table" + +msgid "Label date" +msgstr "Label date" + +msgid "Vol. blocks" +msgstr "Vol. blocks" + +msgid "Vol. abytes" +msgstr "Vol. abytes" + +msgid "Vol. apadding" +msgstr "Vol. apadding" + +msgid "Vol. hole bytes" +msgstr "Vol. hole bytes" + +msgid "Vol. holes" +msgstr "Vol. holes" + +msgid "Vol. parts" +msgstr "Vol. parts" + +msgid "Vol. writes" +msgstr "Vol. writes" + +msgid "Vol. capacity bytes" +msgstr "Vol. capacity bytes" + +msgid "Storage" +msgstr "Storage" + +msgid "Media addressing" +msgstr "Media addressing" + +msgid "Vol. read time" +msgstr "Vol. read time" + +msgid "Vol. write time" +msgstr "Vol. write time" + +msgid "End file" +msgstr "End file" + +msgid "End block" +msgstr "End block" + +msgid "Initial write" +msgstr "Initial write" + +msgid "Vol. type" +msgstr "Vol. type" + +msgid "Vol. cloud parts" +msgstr "Vol. cloud parts" + +msgid "Last part bytes" +msgstr "Last part bytes" + +msgid "Cache retention" +msgstr "Cache retention" diff --git a/gui/baculum/protected/Web/Lang/ja/messages.mo b/gui/baculum/protected/Web/Lang/ja/messages.mo index c09a299fb..a9ee1e634 100644 Binary files a/gui/baculum/protected/Web/Lang/ja/messages.mo and b/gui/baculum/protected/Web/Lang/ja/messages.mo differ diff --git a/gui/baculum/protected/Web/Lang/ja/messages.po b/gui/baculum/protected/Web/Lang/ja/messages.po index 9de7ea6a9..35e385f33 100644 --- a/gui/baculum/protected/Web/Lang/ja/messages.po +++ b/gui/baculum/protected/Web/Lang/ja/messages.po @@ -2610,3 +2610,93 @@ msgstr "Create new resource" msgid "The resource has been created successfully." msgstr "The resource has been created successfully." + +msgid "Scheduled time" +msgstr "Scheduled time" + +msgid "Real end time" +msgstr "Real end time" + +msgid "Read bytes" +msgstr "Read bytes" + +msgid "Job errors" +msgstr "Job errors" + +msgid "Job missing files" +msgstr "Job missing files" + +msgid "Purged files" +msgstr "Purged files" + +msgid "Has base" +msgstr "Has base" + +msgid "Reviewed" +msgstr "Reviewed" + +msgid "Comment" +msgstr "Comment" + +msgid "File table" +msgstr "File table" + +msgid "Label date" +msgstr "Label date" + +msgid "Vol. blocks" +msgstr "Vol. blocks" + +msgid "Vol. abytes" +msgstr "Vol. abytes" + +msgid "Vol. apadding" +msgstr "Vol. apadding" + +msgid "Vol. hole bytes" +msgstr "Vol. hole bytes" + +msgid "Vol. holes" +msgstr "Vol. holes" + +msgid "Vol. parts" +msgstr "Vol. parts" + +msgid "Vol. writes" +msgstr "Vol. writes" + +msgid "Vol. capacity bytes" +msgstr "Vol. capacity bytes" + +msgid "Storage" +msgstr "Storage" + +msgid "Media addressing" +msgstr "Media addressing" + +msgid "Vol. read time" +msgstr "Vol. read time" + +msgid "Vol. write time" +msgstr "Vol. write time" + +msgid "End file" +msgstr "End file" + +msgid "End block" +msgstr "End block" + +msgid "Initial write" +msgstr "Initial write" + +msgid "Vol. type" +msgstr "Vol. type" + +msgid "Vol. cloud parts" +msgstr "Vol. cloud parts" + +msgid "Last part bytes" +msgstr "Last part bytes" + +msgid "Cache retention" +msgstr "Cache retention" diff --git a/gui/baculum/protected/Web/Lang/pl/messages.mo b/gui/baculum/protected/Web/Lang/pl/messages.mo index 2e19b42c0..30307a968 100644 Binary files a/gui/baculum/protected/Web/Lang/pl/messages.mo and b/gui/baculum/protected/Web/Lang/pl/messages.mo differ diff --git a/gui/baculum/protected/Web/Lang/pl/messages.po b/gui/baculum/protected/Web/Lang/pl/messages.po index f459b4b24..d28f8ca47 100644 --- a/gui/baculum/protected/Web/Lang/pl/messages.po +++ b/gui/baculum/protected/Web/Lang/pl/messages.po @@ -2533,3 +2533,92 @@ msgstr "Tworzenie nowego zasobu" msgid "The resource has been created successfully." msgstr "Zasób został utworzony pomyślnie." +msgid "Scheduled time" +msgstr "Scheduled time" + +msgid "Real end time" +msgstr "Real end time" + +msgid "Read bytes" +msgstr "Przeczyt. bajtów" + +msgid "Job errors" +msgstr "Błędy zadania" + +msgid "Job missing files" +msgstr "Brak. pliki zad." + +msgid "Purged files" +msgstr "Wyczy. plików" + +msgid "Has base" +msgstr "Ma bazę" + +msgid "Reviewed" +msgstr "Przejrzane" + +msgid "Comment" +msgstr "Komentarz" + +msgid "File table" +msgstr "Tabela plików" + +msgid "Label date" +msgstr "Data etykiety" + +msgid "Vol. blocks" +msgstr "Bloki wol." + +msgid "Vol. abytes" +msgstr "abytes wol." + +msgid "Vol. apadding" +msgstr "Apadding wol." + +msgid "Vol. hole bytes" +msgstr "Bajtów dziur wol." + +msgid "Vol. holes" +msgstr "Dziur wol." + +msgid "Vol. parts" +msgstr "Części wol." + +msgid "Vol. writes" +msgstr "Zapisów wol." + +msgid "Vol. capacity bytes" +msgstr "Pojemność wol." + +msgid "Storage" +msgstr "Magazyn" + +msgid "Media addressing" +msgstr "Adresowanie mediów" + +msgid "Vol. read time" +msgstr "Czas czytania wol." + +msgid "Vol. write time" +msgstr "Czas zapisu na wol." + +msgid "End file" +msgstr "Koniec pliku" + +msgid "End block" +msgstr "Koniec bloku" + +msgid "Initial write" +msgstr "Wstępny zapis" + +msgid "Vol. type" +msgstr "Typ wol." + +msgid "Vol. cloud parts" +msgstr "Części wol. cloud" + +msgid "Last part bytes" +msgstr "Bajtów ostatniej części" + +msgid "Cache retention" +msgstr "Retencja cache" diff --git a/gui/baculum/protected/Web/Lang/pt/messages.mo b/gui/baculum/protected/Web/Lang/pt/messages.mo index e73c4483f..6e0f6aae1 100644 Binary files a/gui/baculum/protected/Web/Lang/pt/messages.mo and b/gui/baculum/protected/Web/Lang/pt/messages.mo differ diff --git a/gui/baculum/protected/Web/Lang/pt/messages.po b/gui/baculum/protected/Web/Lang/pt/messages.po index 3185ae971..a7f977b0d 100644 --- a/gui/baculum/protected/Web/Lang/pt/messages.po +++ b/gui/baculum/protected/Web/Lang/pt/messages.po @@ -2533,3 +2533,92 @@ msgstr "Criar novo recurso" msgid "The resource has been created successfully." msgstr "O recurso foi criado com sucesso." +msgid "Scheduled time" +msgstr "Scheduled time" + +msgid "Real end time" +msgstr "Real end time" + +msgid "Read bytes" +msgstr "Read bytes" + +msgid "Job errors" +msgstr "Job errors" + +msgid "Job missing files" +msgstr "Job missing files" + +msgid "Purged files" +msgstr "Purged files" + +msgid "Has base" +msgstr "Has base" + +msgid "Reviewed" +msgstr "Reviewed" + +msgid "Comment" +msgstr "Comment" + +msgid "File table" +msgstr "File table" + +msgid "Label date" +msgstr "Label date" + +msgid "Vol. blocks" +msgstr "Vol. blocks" + +msgid "Vol. abytes" +msgstr "Vol. abytes" + +msgid "Vol. apadding" +msgstr "Vol. apadding" + +msgid "Vol. hole bytes" +msgstr "Vol. hole bytes" + +msgid "Vol. holes" +msgstr "Vol. holes" + +msgid "Vol. parts" +msgstr "Vol. parts" + +msgid "Vol. writes" +msgstr "Vol. writes" + +msgid "Vol. capacity bytes" +msgstr "Vol. capacity bytes" + +msgid "Storage" +msgstr "Storage" + +msgid "Media addressing" +msgstr "Media addressing" + +msgid "Vol. read time" +msgstr "Vol. read time" + +msgid "Vol. write time" +msgstr "Vol. write time" + +msgid "End file" +msgstr "End file" + +msgid "End block" +msgstr "End block" + +msgid "Initial write" +msgstr "Initial write" + +msgid "Vol. type" +msgstr "Vol. type" + +msgid "Vol. cloud parts" +msgstr "Vol. cloud parts" + +msgid "Last part bytes" +msgstr "Last part bytes" + +msgid "Cache retention" +msgstr "Cache retention" diff --git a/gui/baculum/protected/Web/Pages/ClientList.page b/gui/baculum/protected/Web/Pages/ClientList.page index 23e190792..129160745 100644 --- a/gui/baculum/protected/Web/Pages/ClientList.page +++ b/gui/baculum/protected/Web/Pages/ClientList.page @@ -51,6 +51,11 @@ var oClientList = { var table = $('#' + this.ids.client_list).DataTable({ data: oData.clients, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -131,7 +136,7 @@ var oClientList = { var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -142,12 +147,20 @@ var oClientList = { column.data().unique().sort(sort_natural).each(function (d, j) { var time = Units.format_time_period(d); var time_f = time.value + ' ' + time.format + ((time.value > 0) ? 's': ''); - select.append(''); + if (column.search() == '^' + dtEscapeRegex(time_f) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { if (d) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } } }); } diff --git a/gui/baculum/protected/Web/Pages/ClientView.page b/gui/baculum/protected/Web/Pages/ClientView.page index 8d8522ba2..262ab9200 100644 --- a/gui/baculum/protected/Web/Pages/ClientView.page +++ b/gui/baculum/protected/Web/Pages/ClientView.page @@ -537,11 +537,31 @@ oGraphicalClientStatus.init(); <%[ Name ]%> <%[ Type ]%> <%[ Level ]%> + ClientId + <%[ Client ]%> + <%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%> + <%[ Real end time ]%> + JobTDate + VolSessionId + VolSessionTime <%[ Job status ]%> <%[ Size ]%> + <%[ Read bytes ]%> <%[ Files ]%> + <%[ Job errors ]%> + <%[ Job missing files ]%> + PoolId + <%[ Pool ]%> + FileSetId + <%[ FileSet ]%> + PriorJobId + <%[ Purged files ]%> + <%[ Has base ]%> + <%[ Reviewed ]%> + <%[ Comment ]%> + <%[ File table ]%> <%[ Action ]%> @@ -553,11 +573,31 @@ oGraphicalClientStatus.init(); <%[ Name ]%> <%[ Type ]%> <%[ Level ]%> + ClientId + <%[ Client ]%> + <%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%> + <%[ Real end time ]%> + JobTDate + VolSessionId + VolSessionTime <%[ Job status ]%> <%[ Size ]%> + <%[ Read bytes ]%> <%[ Files ]%> + <%[ Job errors ]%> + <%[ Job missing files ]%> + PoolId + <%[ Pool ]%> + FileSetId + <%[ FileSet ]%> + PriorJobId + <%[ Purged files ]%> + <%[ Has base ]%> + <%[ Reviewed ]%> + <%[ Comment ]%> + <%[ File table ]%> <%[ Action ]%> @@ -583,6 +623,11 @@ var oJobForClientList = { this.table = $('#' + this.ids.job_list).DataTable({ data: this.data, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -601,11 +646,57 @@ var oJobForClientList = { { data: 'level', render: function(data, type, row) { - return JobLevel.get_level(data); + return (['R', 'D'].indexOf(row.type) === -1 ? JobLevel.get_level(data) : '-'); } }, + { + data: 'clientid', + visible: false + }, + { + data: 'client', + visible: false + }, + { + data: 'schedtime', + visible: false + }, {data: 'starttime'}, {data: 'endtime'}, + { + data: 'realendtime', + visible: false + }, + { + data: 'jobtdate', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'volsessionid', + visible: false + }, + { + data: 'volsessiontime', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, { data: 'jobstatus', render: function (data, type, row) { @@ -631,7 +722,68 @@ var oJobForClientList = { return s; } }, + { + data: 'readbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, {data: 'jobfiles'}, + { + data: 'joberrors', + visible: false + }, + { + data: 'jobmissingfiles', + visible: false + }, + { + data: 'poolid', + visible: false + }, + { + data: 'pool', + visible: false + }, + { + data: 'filesetid', + visible: false + }, + { + data: 'fileset', + visible: false + }, + { + data: 'priorjobid', + visible: false + }, + { + data: 'purgedfiles', + visible: false + }, + { + data: 'hasbase', + visible: false + }, + { + data: 'reviewed', + visible: false + }, + { + data: 'comment', + visible: false + }, + { + data: 'filetable', + visible: false + }, { data: 'jobid', render: function (data, type, row) { @@ -659,35 +811,48 @@ var oJobForClientList = { orderable: false, targets: 0 }, + { + className: 'action_col', + orderable: false, + targets: [ 30 ] + }, { className: "dt-center", - targets: [ 1, 3, 4, 5, 6, 7, 9, 10 ] + targets: [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ] }, { className: "dt-body-right", - targets: [ 8 ] + targets: [ 15, 16 ] }], order: [1, 'desc'], initComplete: function () { - this.api().columns([2, 3, 4, 7]).every(function () { + this.api().columns([2, 3, 4, 14]).every(function () { var column = this; var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column .search(val ? '^' + val + '$' : '', true, false) .draw(); }); - if (column[0][0] == 7) { + if (column[0][0] == 14) { column.data().unique().sort().each(function (d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Pages/FileSetList.page b/gui/baculum/protected/Web/Pages/FileSetList.page index 31a579a08..72dbdddea 100644 --- a/gui/baculum/protected/Web/Pages/FileSetList.page +++ b/gui/baculum/protected/Web/Pages/FileSetList.page @@ -10,7 +10,7 @@
- +
@@ -43,6 +43,11 @@ var oFileSetList = { var table = $('#' + this.ids.fileset_list).DataTable({ data: <%=json_encode($this->filesets)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -90,7 +95,7 @@ var oFileSetList = { var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -98,7 +103,11 @@ var oFileSetList = { .draw(); }); column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); }); } diff --git a/gui/baculum/protected/Web/Pages/JobHistoryList.page b/gui/baculum/protected/Web/Pages/JobHistoryList.page index c60a58e5c..01f3b0907 100644 --- a/gui/baculum/protected/Web/Pages/JobHistoryList.page +++ b/gui/baculum/protected/Web/Pages/JobHistoryList.page @@ -26,11 +26,31 @@ + + + + + + + + + + + + + + + + + + + + @@ -42,11 +62,31 @@ + + + + + + + + + + + + + + + + + + + + @@ -80,6 +120,11 @@ var oJobList = { this.table = $('#' + this.ids.job_list).DataTable({ data: this.data, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -101,8 +146,54 @@ var oJobList = { return (['R', 'D'].indexOf(row.type) === -1 ? JobLevel.get_level(data) : '-'); } }, + { + data: 'clientid', + visible: false + }, + { + data: 'client', + visible: false + }, + { + data: 'schedtime', + visible: false + }, {data: 'starttime'}, {data: 'endtime'}, + { + data: 'realendtime', + visible: false + }, + { + data: 'jobtdate', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'volsessionid', + visible: false + }, + { + data: 'volsessiontime', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, { data: 'jobstatus', render: function (data, type, row) { @@ -128,7 +219,68 @@ var oJobList = { return s; } }, + { + data: 'readbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, {data: 'jobfiles'}, + { + data: 'joberrors', + visible: false + }, + { + data: 'jobmissingfiles', + visible: false + }, + { + data: 'poolid', + visible: false + }, + { + data: 'pool', + visible: false + }, + { + data: 'filesetid', + visible: false + }, + { + data: 'fileset', + visible: false + }, + { + data: 'priorjobid', + visible: false + }, + { + data: 'purgedfiles', + visible: false + }, + { + data: 'hasbase', + visible: false + }, + { + data: 'reviewed', + visible: false + }, + { + data: 'comment', + visible: false + }, + { + data: 'filetable', + visible: false + }, { data: 'jobid', render: function (data, type, row) { @@ -187,37 +339,45 @@ var oJobList = { { className: 'action_col', orderable: false, - targets: [ 10 ] + targets: [ 30 ] }, { className: "dt-center", - targets: [ 1, 3, 4, 5, 6, 7, 9, 10 ] + targets: [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ] }, { className: "dt-body-right", - targets: [ 8 ] + targets: [ 15, 16 ] }], order: [1, 'desc'], initComplete: function () { - this.api().columns([2, 3, 4, 7]).every(function () { + this.api().columns([2, 3, 4, 5, 14]).every(function () { var column = this; var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column .search(val ? '^' + val + '$' : '', true, false) .draw(); }); - if (column[0][0] == 7) { + if (column[0][0] == 14) { column.data().unique().sort().each(function (d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Pages/JobList.page b/gui/baculum/protected/Web/Pages/JobList.page index d26d7dd72..180142230 100644 --- a/gui/baculum/protected/Web/Pages/JobList.page +++ b/gui/baculum/protected/Web/Pages/JobList.page @@ -52,6 +52,11 @@ var oJobHistoryList = { var table = $('#' + this.ids.job_history_list).DataTable({ data: <%=json_encode($this->jobs)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -99,7 +104,7 @@ var oJobHistoryList = { var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -107,7 +112,11 @@ var oJobHistoryList = { .draw(); }); column.data().unique().sort().each(function (d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); }); } diff --git a/gui/baculum/protected/Web/Pages/JobView.page b/gui/baculum/protected/Web/Pages/JobView.page index 87c986204..611788c47 100644 --- a/gui/baculum/protected/Web/Pages/JobView.page +++ b/gui/baculum/protected/Web/Pages/JobView.page @@ -84,11 +84,31 @@ + + + + + + + + + + + + + + + + + + + + @@ -100,11 +120,31 @@ + + + + + + + + + + + + + + + + + + + + @@ -129,6 +169,11 @@ var oJobHistoryList = { this.table = $('#' + this.ids.job_list).DataTable({ data: this.data, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -147,11 +192,57 @@ var oJobHistoryList = { { data: 'level', render: function(data, type, row) { - return JobLevel.get_level(data); + return (['R', 'D'].indexOf(row.type) === -1 ? JobLevel.get_level(data) : '-'); } }, + { + data: 'clientid', + visible: false + }, + { + data: 'client', + visible: false + }, + { + data: 'schedtime', + visible: false + }, {data: 'starttime'}, {data: 'endtime'}, + { + data: 'realendtime', + visible: false + }, + { + data: 'jobtdate', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'volsessionid', + visible: false + }, + { + data: 'volsessiontime', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, { data: 'jobstatus', render: function (data, type, row) { @@ -177,7 +268,68 @@ var oJobHistoryList = { return s; } }, + { + data: 'readbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, {data: 'jobfiles'}, + { + data: 'joberrors', + visible: false + }, + { + data: 'jobmissingfiles', + visible: false + }, + { + data: 'poolid', + visible: false + }, + { + data: 'pool', + visible: false + }, + { + data: 'filesetid', + visible: false + }, + { + data: 'fileset', + visible: false + }, + { + data: 'priorjobid', + visible: false + }, + { + data: 'purgedfiles', + visible: false + }, + { + data: 'hasbase', + visible: false + }, + { + data: 'reviewed', + visible: false + }, + { + data: 'comment', + visible: false + }, + { + data: 'filetable', + visible: false + }, { data: 'jobid', render: function (data, type, row) { @@ -205,35 +357,48 @@ var oJobHistoryList = { orderable: false, targets: 0 }, + { + className: 'action_col', + orderable: false, + targets: [ 30 ] + }, { className: "dt-center", - targets: [ 1, 3, 4, 5, 6, 7, 9, 10 ] + targets: [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 ] }, { className: "dt-body-right", - targets: [ 8 ] + targets: [ 15, 16 ] }], order: [1, 'desc'], initComplete: function () { - this.api().columns([3, 4, 7]).every(function () { + this.api().columns([3, 4, 5, 14]).every(function () { var column = this; var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column .search(val ? '^' + val + '$' : '', true, false) .draw(); }); - if (column[0][0] == 7) { + if (column[0][0] == 14) { column.data().unique().sort().each(function (d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Pages/PoolList.page b/gui/baculum/protected/Web/Pages/PoolList.page index ef219b7b7..234754227 100644 --- a/gui/baculum/protected/Web/Pages/PoolList.page +++ b/gui/baculum/protected/Web/Pages/PoolList.page @@ -53,6 +53,11 @@ var oPoolList = { var table = $('#' + this.ids.pool_list).DataTable({ data: oData.pools, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -131,7 +136,7 @@ var oPoolList = { var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -140,17 +145,29 @@ var oPoolList = { }); if ([3, 4].indexOf(column[0][0]) !== -1) { column.cells('', column[0]).render('display').unique().sort(sort_natural).each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else if (column[0][0] == 5) { column.data().unique().sort(sort_natural).each(function (d, j) { var time = Units.format_time_period(d); var time_f = time.value + ' ' + time.format + ((time.value > 0) ? 's': ''); - select.append(''); + if (column.search() == '^' + dtEscapeRegex(time_f) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Pages/PoolView.page b/gui/baculum/protected/Web/Pages/PoolView.page index bd6392481..56c5035c7 100644 --- a/gui/baculum/protected/Web/Pages/PoolView.page +++ b/gui/baculum/protected/Web/Pages/PoolView.page @@ -123,12 +123,58 @@ + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -139,12 +185,58 @@ + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -175,6 +267,11 @@ var oVolumeList = { this.table = $('#' + this.ids.volume_list).DataTable({ data: <%=json_encode($this->volumes_in_pool)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -184,8 +281,14 @@ var oVolumeList = { }, {data: 'mediaid'}, {data: 'volumename'}, + {data: 'slot'}, { - data: 'slot' + data: 'poolid', + visible: false + }, + { + data: 'pool', + visible: false }, { data: 'inchanger', @@ -193,15 +296,52 @@ var oVolumeList = { return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; } }, + { + data: 'storageid', + visible: false + }, + { + data: 'storage', + visible: false + }, + { + data: 'deviceid', + visible: false + }, {data: 'volstatus'}, + { + data: 'enabled', + render: function(data, type, row) { + return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; + }, + visible: false + }, + { + data: 'recycle', + render: function(data, type, row) { + return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; + }, + visible: false + }, {data: 'mediatype'}, + { + data: 'mediatypeid', + visible: false + }, + { + data: 'labeltype', + visible: false + }, + { + data: 'firstwritten', + visible: false + }, {data: 'lastwritten'}, - {data: 'voljobs'}, { data: 'volbytes', render: function (data, type, row) { var s; - if (type == 'display' || type == 'filter') { + if (type == 'display') { s = Units.get_formatted_size(data) } else { s = data; @@ -209,6 +349,252 @@ var oVolumeList = { return s; } }, + { + data: 'maxvolbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'maxvoljobs', + visible: false + }, + { + data: 'maxvolfiles', + visible: false + }, + { + data: 'volcapacitybytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'volabytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'volapadding', + visible: false + }, + { + data: 'volholebytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'volholes', + visible: false + }, + { + data: 'volparts', + visible: false + }, + { + data: 'volerrors', + visible: false + }, + { + data: 'volwrites', + visible: false + }, + { + data: 'labeldate', + visible: false + }, + { + data: 'voljobs', + visible: false + }, + { + data: 'volfiles', + visible: false + }, + { + data: 'volblocks', + visible: false + }, + { + data: 'volmounts', + visible: false + }, + { + data: 'actiononpurge', + render: function(data, type, row) { + return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; + }, + visible: false + }, + { + data: 'volretention', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'cacheretention', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'voluseduration', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'mediaaddressing', + visible: false + }, + { + data: 'volreadtime', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'volwritetime', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'voltype', + visible: false + }, + { + data: 'volcloudparts', + visible: false + }, + { + data: 'lastpartbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'endfile', + visible: false + }, + { + data: 'endblock', + visible: false + }, + { + data: 'locationid', + visible: false + }, + { + data: 'recyclecount', + visible: false + }, + { + data: 'initialwrite', + visible: false + }, + { + data: 'scratchpoolid', + visible: false + }, + { + data: 'scratchpool', + visible: false + }, + { + data: 'recyclepoolid', + visible: false + }, + { + data: 'recyclepool', + visible: false + }, + { + data: 'comment', + visible: false + }, + { + data: 'whenexpire', + visible: false + }, { data: 'mediaid', render: function(data, type, row) { @@ -238,20 +624,20 @@ var oVolumeList = { }, { className: "dt-center", - targets: [ 1, 3, 4, 5, 7, 8, 10 ] + targets: [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 ] }, { className: "dt-body-right", - targets: [ 9 ] + targets: [ 18 ] }], order: [3, 'asc'], initComplete: function () { - this.api().columns([2, 3, 4, 5, 6]).every(function () { + this.api().columns([2, 3, 6, 10, 13]).every(function () { var column = this; var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -260,11 +646,19 @@ var oVolumeList = { }); if (column[0][0] == 3) { column.cells('', column[0]).render('display').unique().sort(sort_natural).each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Pages/ScheduleList.page b/gui/baculum/protected/Web/Pages/ScheduleList.page index 0f3552321..6d24406f0 100644 --- a/gui/baculum/protected/Web/Pages/ScheduleList.page +++ b/gui/baculum/protected/Web/Pages/ScheduleList.page @@ -20,6 +20,13 @@ + + + + + + +
<%[ Name ]%> <%[ Type ]%> <%[ Level ]%>ClientId<%[ Client ]%><%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%><%[ Real end time ]%>JobTDateVolSessionIdVolSessionTime <%[ Job status ]%> <%[ Size ]%><%[ Read bytes ]%> <%[ Files ]%><%[ Job errors ]%><%[ Job missing files ]%>PoolId<%[ Pool ]%>FileSetId<%[ FileSet ]%>PriorJobId<%[ Purged files ]%><%[ Has base ]%><%[ Reviewed ]%><%[ Comment ]%><%[ File table ]%> <%[ Action ]%>
<%[ Name ]%> <%[ Type ]%> <%[ Level ]%>ClientId<%[ Client ]%><%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%><%[ Real end time ]%>JobTDateVolSessionIdVolSessionTime <%[ Job status ]%> <%[ Size ]%><%[ Read bytes ]%> <%[ Files ]%><%[ Job errors ]%><%[ Job missing files ]%>PoolId<%[ Pool ]%>FileSetId<%[ FileSet ]%>PriorJobId<%[ Purged files ]%><%[ Has base ]%><%[ Reviewed ]%><%[ Comment ]%><%[ File table ]%> <%[ Action ]%>
<%[ Name ]%> <%[ Type ]%> <%[ Level ]%>ClientId<%[ Client ]%><%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%><%[ Real end time ]%>JobTDateVolSessionIdVolSessionTime <%[ Job status ]%> <%[ Size ]%><%[ Read bytes ]%> <%[ Files ]%><%[ Job errors ]%><%[ Job missing files ]%>PoolId<%[ Pool ]%>FileSetId<%[ FileSet ]%>PriorJobId<%[ Purged files ]%><%[ Has base ]%><%[ Reviewed ]%><%[ Comment ]%><%[ File table ]%> <%[ Action ]%>
<%[ Name ]%> <%[ Type ]%> <%[ Level ]%>ClientId<%[ Client ]%><%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%><%[ Real end time ]%>JobTDateVolSessionIdVolSessionTime <%[ Job status ]%> <%[ Size ]%><%[ Read bytes ]%> <%[ Files ]%><%[ Job errors ]%><%[ Job missing files ]%>PoolId<%[ Pool ]%>FileSetId<%[ FileSet ]%>PriorJobId<%[ Purged files ]%><%[ Has base ]%><%[ Reviewed ]%><%[ Comment ]%><%[ File table ]%> <%[ Action ]%>
MediaId <%[ Name ]%> <%[ Slot ]%>PoolId<%[ Pool ]%> InChangerStorageId<%[ Storage ]%>DeviceId <%[ Vol. status ]%><%[ Enabled ]%><%[ Recycle ]%> MediaTypeMediaTypeIdLabelType<%[ First written ]%> <%[ Last written ]%><%[ Vol. jobs ]%> <%[ Vol. bytes ]%><%[ Max. vol. bytes ]%><%[ Max. vol. jobs ]%><%[ Max. vol. files ]%><%[ Vol. capacity bytes ]%><%[ Vol. abytes ]%><%[ Vol. apadding ]%><%[ Vol. hole bytes ]%><%[ Vol. holes ]%><%[ Vol. parts ]%><%[ Vol. errors ]%><%[ Vol. writes ]%><%[ Label date ]%><%[ Vol. jobs ]%><%[ Vol. files ]%><%[ Vol. blocks ]%><%[ Vol. mounts ]%><%[ Action on purge ]%><%[ Vol. retention ]%><%[ Cache retention ]%><%[ Vol. use duration ]%><%[ Media addressing ]%><%[ Vol. read time ]%><%[ Vol. write time ]%><%[ Vol. type ]%><%[ Vol. cloud parts ]%><%[ Last part bytes ]%><%[ End file ]%><%[ End block ]%>LocationId<%[ Recycle count ]%><%[ Initial write ]%>ScratchPoolId<%[ Scratch pool ]%>RecyclePoolId<%[ Recycle pool ]%><%[ Comment ]%><%[ When expire ]%> <%[ Actions ]%>
MediaId <%[ Name ]%> <%[ Slot ]%>PoolId<%[ Pool ]%> InChangerStorageId<%[ Storage ]%>DeviceId <%[ Vol. status ]%><%[ Enabled ]%><%[ Recycle ]%> MediaTypeMediaTypeIdLabelType<%[ First written ]%> <%[ Last written ]%><%[ Vol. jobs ]%> <%[ Vol. bytes ]%><%[ Max. vol. bytes ]%><%[ Max. vol. jobs ]%><%[ Max. vol. files ]%><%[ Vol. capacity bytes ]%><%[ Vol. abytes ]%><%[ Vol. apadding ]%><%[ Vol. hole bytes ]%><%[ Vol. holes ]%><%[ Vol. parts ]%><%[ Vol. errors ]%><%[ Vol. writes ]%><%[ Label date ]%><%[ Vol. jobs ]%><%[ Vol. files ]%><%[ Vol. blocks ]%><%[ Vol. mounts ]%><%[ Action on purge ]%><%[ Vol. retention ]%><%[ Cache retention ]%><%[ Vol. use duration ]%><%[ Media addressing ]%><%[ Vol. read time ]%><%[ Vol. write time ]%><%[ Vol. type ]%><%[ Vol. cloud parts ]%><%[ Last part bytes ]%><%[ End file ]%><%[ End block ]%>LocationId<%[ Recycle count ]%><%[ Initial write ]%>ScratchPoolId<%[ Scratch pool ]%>RecyclePoolId<%[ Recycle pool ]%><%[ Comment ]%><%[ When expire ]%> <%[ Actions ]%>
<%[ Name ]%><%[ Actions ]%>
@@ -36,6 +43,11 @@ var oScheduleList = { var table = $('#' + this.ids.schedule_list).DataTable({ data: <%=json_encode($this->schedules)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -75,7 +87,29 @@ var oScheduleList = { className: "dt-center", targets: [ 2 ] }], - order: [1, 'asc'] + order: [1, 'asc'], + initComplete: function () { + this.api().columns([1]).every(function () { + var column = this; + var select = $('') + .appendTo($(column.footer()).empty()) + .on('change', function () { + var val = dtEscapeRegex( + $(this).val() + ); + column + .search(val ? '^' + val + '$' : '', true, false) + .draw(); + }); + column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } + }); + }); + } }); } }; diff --git a/gui/baculum/protected/Web/Pages/StorageList.page b/gui/baculum/protected/Web/Pages/StorageList.page index 8cdbd37b8..d71abc3b7 100644 --- a/gui/baculum/protected/Web/Pages/StorageList.page +++ b/gui/baculum/protected/Web/Pages/StorageList.page @@ -12,7 +12,7 @@
- +
@@ -47,6 +47,11 @@ var oStorageList = { var table = $('#' + this.ids.storage_list).DataTable({ data: <%=json_encode($this->storages)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -101,7 +106,7 @@ var oStorageList = { var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -109,7 +114,11 @@ var oStorageList = { .draw(); }); column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); }); } diff --git a/gui/baculum/protected/Web/Pages/VolumeList.page b/gui/baculum/protected/Web/Pages/VolumeList.page index 72ba97ac2..d2d73e376 100644 --- a/gui/baculum/protected/Web/Pages/VolumeList.page +++ b/gui/baculum/protected/Web/Pages/VolumeList.page @@ -18,11 +18,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -33,11 +80,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56,6 +150,11 @@ var oVolumeList = { var table = $('#' + this.ids.volume_list).DataTable({ data: <%=json_encode($this->volumes)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -65,8 +164,14 @@ var oVolumeList = { }, {data: 'mediaid'}, {data: 'volumename'}, + {data: 'slot'}, + { + data: 'poolid', + visible: false + }, { - data: 'slot' + data: 'pool', + visible: false }, { data: 'inchanger', @@ -74,8 +179,46 @@ var oVolumeList = { return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; } }, + { + data: 'storageid', + visible: false + }, + { + data: 'storage', + visible: false + }, + { + data: 'deviceid', + visible: false + }, {data: 'volstatus'}, + { + data: 'enabled', + render: function(data, type, row) { + return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; + }, + visible: false + }, + { + data: 'recycle', + render: function(data, type, row) { + return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; + }, + visible: false + }, {data: 'mediatype'}, + { + data: 'mediatypeid', + visible: false + }, + { + data: 'labeltype', + visible: false + }, + { + data: 'firstwritten', + visible: false + }, {data: 'lastwritten'}, { data: 'volbytes', @@ -89,6 +232,252 @@ var oVolumeList = { return s; } }, + { + data: 'maxvolbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'maxvoljobs', + visible: false + }, + { + data: 'maxvolfiles', + visible: false + }, + { + data: 'volcapacitybytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'volabytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'volapadding', + visible: false + }, + { + data: 'volholebytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'volholes', + visible: false + }, + { + data: 'volparts', + visible: false + }, + { + data: 'volerrors', + visible: false + }, + { + data: 'volwrites', + visible: false + }, + { + data: 'labeldate', + visible: false + }, + { + data: 'voljobs', + visible: false + }, + { + data: 'volfiles', + visible: false + }, + { + data: 'volblocks', + visible: false + }, + { + data: 'volmounts', + visible: false + }, + { + data: 'actiononpurge', + render: function(data, type, row) { + return (data === 1) ? '<%[ Yes ]%>' : '<%[ No ]%>'; + }, + visible: false + }, + { + data: 'volretention', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'cacheretention', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'voluseduration', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'mediaaddressing', + visible: false + }, + { + data: 'volreadtime', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'volwritetime', + render: function(data, type, row) { + var t; + if (type == 'display') { + var ret = Units.format_time_period(data); + t = ret.value + ' ' + ret.format; + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'voltype', + visible: false + }, + { + data: 'volcloudparts', + visible: false + }, + { + data: 'lastpartbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, + { + data: 'endfile', + visible: false + }, + { + data: 'endblock', + visible: false + }, + { + data: 'locationid', + visible: false + }, + { + data: 'recyclecount', + visible: false + }, + { + data: 'initialwrite', + visible: false + }, + { + data: 'scratchpoolid', + visible: false + }, + { + data: 'scratchpool', + visible: false + }, + { + data: 'recyclepoolid', + visible: false + }, + { + data: 'recyclepool', + visible: false + }, + { + data: 'comment', + visible: false + }, + { + data: 'whenexpire', + visible: false + }, { data: 'mediaid', render: function(data, type, row) { @@ -118,20 +507,20 @@ var oVolumeList = { }, { className: "dt-center", - targets: [ 1, 3, 4, 5, 7, 9 ] + targets: [ 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56 ] }, { className: "dt-body-right", - targets: [ 8 ] + targets: [ 18 ] }], order: [3, 'asc'], initComplete: function () { - this.api().columns([2, 3, 4, 5, 6]).every(function () { + this.api().columns([2, 3, 6, 10, 13]).every(function () { var column = this; var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -140,11 +529,19 @@ var oVolumeList = { }); if (column[0][0] == 3) { column.cells('', column[0]).render('display').unique().sort(sort_natural).each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Pages/VolumeView.page b/gui/baculum/protected/Web/Pages/VolumeView.page index ab57219a6..ab368e610 100644 --- a/gui/baculum/protected/Web/Pages/VolumeView.page +++ b/gui/baculum/protected/Web/Pages/VolumeView.page @@ -160,11 +160,31 @@ + + + + + + + + + + + + + + + + + + + + @@ -176,11 +196,31 @@ + + + + + + + + + + + + + + + + + + + + @@ -378,6 +418,11 @@ var oJobsOnVolumeList = { this.table = $('#' + this.ids.jobs_on_volume_list).DataTable({ data: <%=json_encode($this->jobs_on_volume)%>, deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -396,11 +441,57 @@ var oJobsOnVolumeList = { { data: 'level', render: function(data, type, row) { - return JobLevel.get_level(data); + return (['R', 'D'].indexOf(row.type) === -1 ? JobLevel.get_level(data) : '-'); } }, + { + data: 'clientid', + visible: false + }, + { + data: 'client', + visible: false + }, + { + data: 'schedtime', + visible: false + }, {data: 'starttime'}, {data: 'endtime'}, + { + data: 'realendtime', + visible: false + }, + { + data: 'jobtdate', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, + { + data: 'volsessionid', + visible: false + }, + { + data: 'volsessiontime', + render: function (data, type, row) { + var t; + if (type == 'display') { + t = Units.format_date(data) + } else { + t = data; + } + return t; + }, + visible: false + }, { data: 'jobstatus', render: function (data, type, row) { @@ -411,7 +502,8 @@ var oJobsOnVolumeList = { ret = data; } return ret; - } + }, + className: 'w3-center' }, { data: 'jobbytes', @@ -425,7 +517,68 @@ var oJobsOnVolumeList = { return s; } }, + { + data: 'readbytes', + render: function (data, type, row) { + var s; + if (type == 'display') { + s = Units.get_formatted_size(data) + } else { + s = data; + } + return s; + }, + visible: false + }, {data: 'jobfiles'}, + { + data: 'joberrors', + visible: false + }, + { + data: 'jobmissingfiles', + visible: false + }, + { + data: 'poolid', + visible: false + }, + { + data: 'pool', + visible: false + }, + { + data: 'filesetid', + visible: false + }, + { + data: 'fileset', + visible: false + }, + { + data: 'priorjobid', + visible: false + }, + { + data: 'purgedfiles', + visible: false + }, + { + data: 'hasbase', + visible: false + }, + { + data: 'reviewed', + visible: false + }, + { + data: 'comment', + visible: false + }, + { + data: 'filetable', + visible: false + }, { data: 'jobid', render: function (data, type, row) { @@ -463,25 +616,33 @@ var oJobsOnVolumeList = { }], order: [1, 'desc'], initComplete: function () { - this.api().columns([2, 3, 4, 7]).every(function () { + this.api().columns([2, 3, 4, 14]).every(function () { var column = this; var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column .search(val ? '^' + val + '$' : '', true, false) .draw(); }); - if (column[0][0] == 7) { + if (column[0][0] == 14) { column.data().unique().sort().each(function (d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/protected/Web/Portlets/StatusSchedule.tpl b/gui/baculum/protected/Web/Portlets/StatusSchedule.tpl index 80a6df24b..e68a7b064 100644 --- a/gui/baculum/protected/Web/Portlets/StatusSchedule.tpl +++ b/gui/baculum/protected/Web/Portlets/StatusSchedule.tpl @@ -134,6 +134,11 @@ var oJobScheduleList = { this.table = $('#' + this.ids.schedule_list).DataTable({ data: this.get_data(), deferRender: true, + dom: 'lBfrtip', + stateSave: true, + buttons: [ + 'copy', 'csv', 'colvis' + ], columns: [ { className: 'details-control', @@ -210,7 +215,7 @@ var oJobScheduleList = { var select = $('') .appendTo($(column.footer()).empty()) .on('change', function () { - var val = $.fn.dataTable.util.escapeRegex( + var val = dtEscapeRegex( $(this).val() ); column @@ -219,11 +224,19 @@ var oJobScheduleList = { }); if (column[0][0] == 3) { column.cells('', column[0]).render('display').unique().sort(sort_natural).each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } else { column.cells('', column[0]).render('display').unique().sort().each(function(d, j) { - select.append(''); + if (column.search() == '^' + dtEscapeRegex(d) + '$') { + select.append(''); + } else { + select.append(''); + } }); } }); diff --git a/gui/baculum/themes/Baculum-v2/css/baculum.css b/gui/baculum/themes/Baculum-v2/css/baculum.css index c4f616773..486f2f8de 100644 --- a/gui/baculum/themes/Baculum-v2/css/baculum.css +++ b/gui/baculum/themes/Baculum-v2/css/baculum.css @@ -51,6 +51,10 @@ table.dataTable.no-footer { box-shadow: none !important; } +.dataTables_length { + margin-right: 5px; +} + th.action_col, td.action_col { width: 110px !important; }
MediaId <%[ Name ]%> <%[ Slot ]%>PoolId<%[ Pool ]%> InChangerStorageId<%[ Storage ]%>DeviceId <%[ Vol. status ]%><%[ Enabled ]%><%[ Recycle ]%> MediaTypeMediaTypeIdLabelType<%[ First written ]%> <%[ Last written ]%> <%[ Vol. bytes ]%><%[ Max. vol. bytes ]%><%[ Max. vol. jobs ]%><%[ Max. vol. files ]%><%[ Vol. capacity bytes ]%><%[ Vol. abytes ]%><%[ Vol. apadding ]%><%[ Vol. hole bytes ]%><%[ Vol. holes ]%><%[ Vol. parts ]%><%[ Vol. errors ]%><%[ Vol. writes ]%><%[ Label date ]%><%[ Vol. jobs ]%><%[ Vol. files ]%><%[ Vol. blocks ]%><%[ Vol. mounts ]%><%[ Action on purge ]%><%[ Vol. retention ]%><%[ Cache retention ]%><%[ Vol. use duration ]%><%[ Media addressing ]%><%[ Vol. read time ]%><%[ Vol. write time ]%><%[ Vol. type ]%><%[ Vol. cloud parts ]%><%[ Last part bytes ]%><%[ End file ]%><%[ End block ]%>LocationId<%[ Recycle count ]%><%[ Initial write ]%>ScratchPoolId<%[ Scratch pool ]%>RecyclePoolId<%[ Recycle pool ]%><%[ Comment ]%><%[ When expire ]%> <%[ Actions ]%>
MediaId <%[ Name ]%> <%[ Slot ]%>PoolId<%[ Pool ]%> InChangerStorageId<%[ Storage ]%>DeviceId <%[ Vol. status ]%><%[ Enabled ]%><%[ Recycle ]%> MediaTypeMediaTypeIdLabelType<%[ First written ]%> <%[ Last written ]%> <%[ Vol. bytes ]%><%[ Max. vol. bytes ]%><%[ Max. vol. jobs ]%><%[ Max. vol. files ]%><%[ Vol. capacity bytes ]%><%[ Vol. abytes ]%><%[ Vol. apadding ]%><%[ Vol. hole bytes ]%><%[ Vol. holes ]%><%[ Vol. parts ]%><%[ Vol. errors ]%><%[ Vol. writes ]%><%[ Label date ]%><%[ Vol. jobs ]%><%[ Vol. files ]%><%[ Vol. blocks ]%><%[ Vol. mounts ]%><%[ Action on purge ]%><%[ Vol. retention ]%><%[ Cache retention ]%><%[ Vol. use duration ]%><%[ Media addressing ]%><%[ Vol. read time ]%><%[ Vol. write time ]%><%[ Vol. type ]%><%[ Vol. cloud parts ]%><%[ Last part bytes ]%><%[ End file ]%><%[ End block ]%>LocationId<%[ Recycle count ]%><%[ Initial write ]%>ScratchPoolId<%[ Scratch pool ]%>RecyclePoolId<%[ Recycle pool ]%><%[ Comment ]%><%[ When expire ]%> <%[ Actions ]%>
<%[ Name ]%> <%[ Type ]%> <%[ Level ]%>ClientId<%[ Client ]%><%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%><%[ Real end time ]%>JobTDateVolSessionIdVolSessionTime <%[ Job status ]%> <%[ Size ]%><%[ Read bytes ]%> <%[ Files ]%><%[ Job errors ]%><%[ Job missing files ]%>PoolId<%[ Pool ]%>FileSetId<%[ FileSet ]%>PriorJobId<%[ Purged files ]%><%[ Has base ]%><%[ Reviewed ]%><%[ Comment ]%><%[ File table ]%> <%[ Action ]%>
<%[ Name ]%> <%[ Type ]%> <%[ Level ]%>ClientId<%[ Client ]%><%[ Scheduled time ]%> <%[ Start time ]%> <%[ End time ]%><%[ Real end time ]%>JobTDateVolSessionIdVolSessionTime <%[ Job status ]%> <%[ Size ]%><%[ Read bytes ]%> <%[ Files ]%><%[ Job errors ]%><%[ Job missing files ]%>PoolId<%[ Pool ]%>FileSetId<%[ FileSet ]%>PriorJobId<%[ Purged files ]%><%[ Has base ]%><%[ Reviewed ]%><%[ Comment ]%><%[ File table ]%> <%[ Action ]%>