open: function(btn_id, item_id) {
W3TabsCommon.open.call(this, btn_id, item_id);
}
-}
+};
+
+function estimate_job(jobs, job, level) {
+ var bytes = 0;
+ var files = 0;
+ var time = 0;
+ var bytes_xy = 0;
+ var files_xy = 0;
+ var x2 = 0;
+ var counter = 0;
+ for (var i = 0; i < jobs.length; i++) {
+ if (jobs[i].name === job && jobs[i].level === level) {
+ if (jobs[i].jobbytes === 0 || jobs[i].jobfies === 0 || jobs[i].jobstatus !== 'T') {
+ continue;
+ }
+ if (counter === 20) {
+ break;
+ }
+ time += jobs[i].jobtdate;
+ bytes += jobs[i].jobbytes;
+ files += jobs[i].jobfiles;
+ bytes_xy += jobs[i].jobtdate * jobs[i].jobbytes;
+ files_xy += jobs[i].jobtdate * jobs[i].jobfiles;
+ x2 += Math.pow(jobs[i].jobtdate, 2);
+ counter++;
+ }
+ }
+ var bytes_slope = ((counter * bytes_xy) - (time * bytes)) / (counter * x2 - Math.pow(time, 2));
+ var files_slope = ((counter * files_xy) - (time * files)) / (counter * x2 - Math.pow(time, 2));
+ var bytes_intercept = (bytes / counter) - (bytes_slope * (time / counter));
+ var files_intercept = (files / counter) - (files_slope * (time / counter));
+ var est_bytes = bytes_intercept + (bytes_slope * parseInt((new Date).getTime() / 1000, 10));
+ var est_files = files_intercept + (files_slope * parseInt((new Date).getTime() / 1000, 10));
+ return {
+ est_bytes: est_bytes,
+ est_files: est_files
+ };
+};
function get_url_param (name) {
var url = window.location.href;
msgid "Graphical status"
msgstr "Graphical status"
-msgid "Text status"
-msgstr "Text status"
+msgid "Raw status"
+msgstr "Raw status"
msgid "Uname:"
msgstr "Uname:"
msgid "Here you can set bandwidth limit for job. This change is applied on running job."
msgstr "Here you can set bandwidth limit for job. This change is applied on running job."
+
+msgid "est."
+msgstr "est."
+
+msgid "Progress bar displays estimated values"
+msgstr "Progress bar displays estimated values"
+
+msgid "Byte progress bar:"
+msgstr "Byte progress bar:"
+
+msgid "File progress bar:"
+msgstr "File progress bar:"
+
+msgid "Running job status"
+msgstr "Running job status"
+
+msgid "Raw job log"
+msgstr "Raw job log"
+
+msgid "Not available"
+msgstr "Not available"
msgid "Graphical status"
msgstr "Graphical status"
-msgid "Text status"
-msgstr "Text status"
+msgid "Raw status"
+msgstr "Raw status"
msgid "Uname:"
msgstr "Uname:"
msgid "Here you can set bandwidth limit for job. This change is applied on running job."
msgstr "Here you can set bandwidth limit for job. This change is applied on running job."
+
+msgid "est."
+msgstr "est."
+
+msgid "Progress bar displays estimated values"
+msgstr "Progress bar displays estimated values"
+
+msgid "Byte progress bar:"
+msgstr "Byte progress bar:"
+
+msgid "File progress bar:"
+msgstr "File progress bar:"
+
+msgid "Running job status"
+msgstr "Running job status"
+
+msgid "Raw job log"
+msgstr "Raw job log"
+
+msgid "Not available"
+msgstr "Not available"
msgid "Graphical status"
msgstr "Status graficzny"
-msgid "Text status"
+msgid "Raw status"
msgstr "Status tekstowy"
msgid "Uname:"
msgid "Here you can set bandwidth limit for job. This change is applied on running job."
msgstr "Tutaj możesz ustawić limit transferu dla zadania. Ta zmiana jest stosowana do uruchomionego zadania."
+
+msgid "est."
+msgstr "est."
+
+msgid "Progress bar displays estimated values"
+msgstr "Pasek postępu wyświetla szacunkowe wartości"
+
+msgid "Byte progress bar:"
+msgstr "Pasek postępu bajtów:"
+
+msgid "File progress bar:"
+msgstr "Pasek postępu plików:"
+
+msgid "Running job status"
+msgstr "Status uruchomionego zadania"
+
+msgid "Raw job log"
+msgstr "Surowy dziennik zadania"
+
+msgid "Not available"
+msgstr "Niedostępny"
msgid "Graphical status"
msgstr "Graphical status"
-msgid "Text status"
-msgstr "Text status"
+msgid "Raw status"
+msgstr "Raw status"
msgid "Uname:"
msgstr "Uname:"
msgid "Here you can set bandwidth limit for job. This change is applied on running job."
msgstr "Here you can set bandwidth limit for job. This change is applied on running job."
+
+msgid "est."
+msgstr "est."
+
+msgid "Progress bar displays estimated values"
+msgstr "Progress bar displays estimated values"
+
+msgid "Byte progress bar:"
+msgstr "Byte progress bar:"
+
+msgid "File progress bar:"
+msgstr "File progress bar:"
+
+msgid "Running job status"
+msgstr "Running job status"
+
+msgid "Raw job log"
+msgstr "Raw job log"
+
+msgid "Not available"
+msgstr "Not available"
<div id="status_client_subtab_graphical" class="subtab_btn w3-half w3-bottombar w3-hover-light-grey w3-border-red w3-padding"><%[ Graphical status ]%></div>
</a>
<a href="javascript:void(0)" onclick="W3SubTabs.open('status_client_subtab_text', 'status_client_text_output');">
- <div id="status_client_subtab_text" class="subtab_btn w3-half w3-bottombar w3-hover-light-grey w3-padding"><%[ Text status ]%></div>
+ <div id="status_client_subtab_text" class="subtab_btn w3-half w3-bottombar w3-hover-light-grey w3-padding"><%[ Raw status ]%></div>
</a>
</div>
<div id="status_client_graphical_output" class="subtab_item">
OnCallback="setBandwidthControl"
ClientSide.OnComplete="oJobBandwidthLimit.open_popup();"
/>
+<com:TJuiProgressbar Display="None" />
<script type="text/javascript">
var oGraphicalClientStatus = {
data: {},
this.add_job_row(table, '<%[ Processing file: ]%>', processing_file.outerHTML);
}
+ var job_name = job.job.replace(/\.\d{4}-\d{2}-\d{2}_\d{2}.\d{2}.\d{2}_\d{2}$/, '');
+ var bytes = parseInt(job.jobbytes, 10);
+ var files = parseInt(job.jobfiles, 10);
+ files = files > 0 ? (files - 1) : 0;
+ var est = estimate_job(oData.jobs, job_name, job.level);
+
+ // Progress bar bytes
+ var bytes_progress;
+ if (job.type === 'B' && est.est_bytes > 0) {
+ bytes_progress = document.createElement('DIV');
+ bytes_progress.className = 'progressbar';
+ bytes_progress.title = '<%[ Progress bar displays estimated values ]%>';
+ var bytes_label = document.createElement('DIV');
+ bytes_label.className = 'progressbar-label';
+ bytes_label.textContent = Units.get_formatted_size(bytes) + ' / <%[ est. ]%> ' + Units.get_formatted_size(est.est_bytes) + ' (' + ((100 * bytes) / est.est_bytes).toFixed(1) + '%' + ')';
+ bytes_progress.style.width = '70%';
+ bytes_progress.appendChild(bytes_label);
+ var bytes_bar = $(bytes_progress);
+ bytes_bar.progressbar({
+ max: est.est_bytes,
+ value: bytes
+ });
+ } else {
+ bytes_progress = '<%[ Not available ]%>';
+ }
+ this.add_job_row(table, '<%[ Byte progress bar: ]%>', bytes_progress);
+
+
+ // Progress bar files
+ var files_progress;
+ if (job.type === 'B' && est.est_files > 0) {
+ files_progress = document.createElement('DIV');
+ files_progress.className = 'progressbar';
+ files_progress.title = '<%[ Progress bar displays estimated values ]%>';
+ var files_label = document.createElement('DIV');
+ files_label.className = 'progressbar-label';
+ files_label.textContent = files + ' / <%[ est. ]%> ' + parseInt(est.est_files, 10) + ' (' + ((100 * files) / est.est_files).toFixed(1) + '%' + ')';
+ files_progress.style.width = '70%';
+ files_progress.appendChild(files_label);
+ var files_bar = $(files_progress);
+ files_bar.progressbar({
+ max: est.est_files,
+ value: files
+ });
+ } else {
+ files_progress = '<%[ Not available ]%>';
+ }
+ this.add_job_row(table, '<%[ File progress bar: ]%>', files_progress);
+
// Job errors
this.add_job_row(table, '<%[ Job errors: ]%>', job.errors);
Prado::using('System.Web.UI.ActiveControls.TActiveLabel');
Prado::using('System.Web.UI.ActiveControls.TActiveLinkButton');
Prado::using('System.Web.UI.ActiveControls.TCallback');
+Prado::using('System.Web.UI.JuiControls.TJuiProgressbar');
Prado::using('Application.Web.Class.BaculumWebPage');
class ClientView extends BaculumWebPage {
);
if ($graph_status->error === 0) {
$client_status['header'] = $graph_status->output;
- if (!$this->BWLimit->BandwidthLimit->getDirectiveValue()) {
+ if (!$this->BWLimit->BandwidthLimit->getDirectiveValue() && is_object($client_status['header'])) {
$this->BWLimit->setBandwidthLimit($client_status['header']->bwlimit);
$this->getCallbackClient()->callClientFunction(
'oClientBandwidthLimit.set_value',
.fa-ellipsis-v:hover {
background-color: #efeff0;
}
+
+.progressbar {
+ position: relative;
+}
+
+.progressbar-label {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+ top: 4px;
+ font-weight: bold;
+ text-shadow: 1px 1px 0 #fff;
+}