1 <%@ MasterClass="Application.Layouts.Main" Theme="Baculum-v1"%>
2 <com:TContent ID="Main">
5 <div id="directors"><com:TLabel ForControl="Director" Text="<%[ Director: ]%>" />
6 <com:TActiveDropDownList ID="Director" OnTextChanged="director" />
8 <div id="panel_switcher">
9 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/dashboard.png" alt="" onclick="$('<%=$this->Dashboard->ClientID%>').click()" />
10 <com:TActiveLinkButton ID="Dashboard" Text="<%[ Dashboard ]%>" Attributes.onclick="PanelWindow.show('dashboard'); return false;" />
11 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/workspace.png" alt="" onclick="$('<%=$this->Workspace->ClientID%>').click()"/>
12 <com:TActiveLinkButton ID="Workspace" Text="<%[ Workspace ]%>" Attributes.onclick="PanelWindow.show('container'); return false;" />
13 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/graphs.png" alt="" onclick="$('<%=$this->Graphs->ClientID%>').click()" />
14 <com:TActiveLinkButton ID="Graphs" Text="<%[ Graphs ]%>" Attributes.onclick="PanelWindow.show('graphs'); return false;" />
15 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/users.png" alt="" onclick="$('<%=$this->Users->ClientID%>').click()" <%=$this->User->getIsAdmin() === false ? ' style="display: none;"' : ''%>/>
16 <com:TActiveLinkButton ID="Users" Text="<%[ Users ]%>" Attributes.onclick="PanelWindow.show('users'); return false;" />
17 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/logout.png" alt="" onclick="$('<%=$this->Logout->ClientID%>').click()" />
18 <com:TActiveLinkButton ID="Logout" Text="<%[ Logout ]%>" OnClick="logout" ClientSide.OnComplete="document.location.href = document.location.protocol + '//' + document.location.host;" />
20 <com:Application.Portlets.TrayBar ID="TrayBar" />
25 <div class="dashboard_graph">
26 <div id="jobs_summary_graph">
27 <script type="text/javascript">
28 var oJobsStates = <%=$this->jobs_states%>;
31 <span><%[ Jobs status summary ]%></span>
33 <div id="dashboard_icons">
34 <fieldset class="dashboard_field">
35 <legend><%[ Clients ]%></legend>
36 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/client.png" alt="" />
37 <p><span><%[ Number of clients: ]%></span><span id="clients_no"></span></p>
38 <p><span><%[ Most often used: ]%></span><span id="clients_most"></span></p>
39 <p><span><%[ Jobs count on most used: ]%></span><span id="clients_jobs"></span> <%[ jobs ]%></p>
41 <fieldset class="dashboard_field">
42 <legend><%[ Quick job access ]%></legend>
43 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/quick-access.png" alt="" />
44 <p><span><%[ Jump to job (last 100): ]%></span></p><select id="jobs_to_view"></select>
45 <p class="right"><a href="javascript:void(0)" onclick="SlideWindow.getObj('JobWindow').quickJumpToElement($('jobs_to_view').value, '<%=$this->JobBtn->ClientID%>', PanelWindow);"><%[ View ]%></a></p>
47 <fieldset class="dashboard_field">
48 <legend><%[ Finished jobs ]%></legend>
49 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/finished-jobs.png" alt="" />
50 <p><span><%[ Most often used: ]%></span><span id="jobs_most"></span></p>
51 <p><span><%[ Execution count most used: ]%></span><span id="jobs_most_count"></span> <%[ times ]%></p>
53 <fieldset class="dashboard_field"<%=$this->User->getIsAdmin() === false ? ' style="display: none;"' : ''%>>
54 <legend><%[ Database ]%></legend>
55 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/database.png" alt="" />
56 <p><span><%[ Database type: ]%></span><span><%=$this->dbtype%></span></p>
57 <p><span><%[ Database size: ]%></span><span id="database_size"></span></p>
59 <fieldset class="dashboard_field">
60 <legend><%[ Pools ]%></legend>
61 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/tapes.png" alt="" />
62 <p><span><%[ Number of pools: ]%></span><span id="pools_no"></span></p>
63 <p><span><%[ Most often used: ]%></span><span id="pools_most"></span></p>
64 <p><span><%[ Jobs count on most used: ]%></span><span id="pools_jobs"></span> <%[ jobs ]%></p>
66 <fieldset class="dashboard_field">
67 <legend><%[ Job Totals ]%></legend>
68 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/jobtotals.png" alt="" />
69 <p><span><%[ Total bytes: ]%></span><span id="jobs_total_bytes"></span></p>
70 <p><span><%[ Total files: ]%></span><span id="jobs_total_files"></span></p>
72 <fieldset class="dashboard_field">
73 <legend><%[ Restore Wizard ]%></legend>
74 <a class="big" href="<%=$this->Service->constructUrl('RestoreWizard')%>" style="line-height: 73px; margin: 0 45px"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/restore.png" alt="" /><%[ Perform Restore ]%></a>
76 <fieldset class="dashboard_field"<%=$this->User->getIsAdmin() === false ? ' style="display: none;"' : ''%>>
77 <legend><%[ Configuration Wizard ]%></legend>
78 <a class="big" href="<%=$this->Service->constructUrl('ConfigurationWizard')%>" style="line-height: 73px; margin: 0 45px"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/setting.png" alt="" /><%[ Baculum Settings ]%></a>
81 <div style="clear: both"></div>
84 <div id="container" style="display: none;">
86 <com:TActiveButton ID="StorageBtn" CssClass="storage-btn">
87 <prop:Attributes.onmouseover>
90 '<%=Prado::localize('Storage Daemons')%>',
91 '<%=Prado::localize('Configuration of storage daemons.')%>'
93 </prop:Attributes.onmouseover>
94 <prop:ClientSide.OnLoading>
95 SlideWindow.getObj('StorageWindow').showProgress(true);
96 </prop:ClientSide.OnLoading>
97 <prop:ClientSide.OnComplete>
98 SlideWindow.getObj('StorageWindow').setWindowElementsEvent({
99 repeater_id: '<%=$this->StorageWindow->Repeater->ClientID%>',
100 grid_id: '<%=$this->StorageWindow->DataGrid->ClientID%>',
101 request_obj: <%=$this->StorageWindow->DataElementCall->ActiveControl->Javascript%>
103 </prop:ClientSide.OnComplete>
105 <com:TActiveButton ID="ClientBtn" CssClass="client-btn">
106 <prop:Attributes.onmouseover>
109 '<%=Prado::localize('Clients')%>',
110 '<%=Prado::localize('Configuration of clients daemons.')%>'
112 </prop:Attributes.onmouseover>
113 <prop:ClientSide.OnLoading>
114 SlideWindow.getObj('ClientWindow').showProgress(true);
115 </prop:ClientSide.OnLoading>
116 <prop:ClientSide.OnComplete>
117 SlideWindow.getObj('ClientWindow').setWindowElementsEvent({
118 repeater_id: '<%=$this->ClientWindow->Repeater->ClientID%>',
119 grid_id: '<%=$this->ClientWindow->DataGrid->ClientID%>',
120 request_obj: <%=$this->ClientWindow->DataElementCall->ActiveControl->Javascript%>
122 </prop:ClientSide.OnComplete>
124 <com:TActiveButton ID="VolumeBtn" CssClass="media-btn">
125 <prop:Attributes.onmouseover>
128 '<%=Prado::localize('Volumes')%>',
129 '<%=Prado::localize('Management of volumes.')%>'
131 </prop:Attributes.onmouseover>
132 <prop:ClientSide.OnLoading>
133 SlideWindow.getObj('VolumeWindow').showProgress(true);
134 </prop:ClientSide.OnLoading>
135 <prop:ClientSide.OnComplete>
136 SlideWindow.getObj('VolumeWindow').setWindowElementsEvent({
137 repeater_id: '<%=$this->VolumeWindow->Repeater->ClientID%>',
138 grid_id: '<%=$this->VolumeWindow->DataGrid->ClientID%>',
139 request_obj: <%=$this->VolumeWindow->DataElementCall->ActiveControl->Javascript%>
141 </prop:ClientSide.OnComplete>
143 <com:TActiveButton ID="PoolBtn" CssClass="pool-btn">
144 <prop:Attributes.onmouseover>
147 '<%=Prado::localize('Pools')%>',
148 '<%=Prado::localize('Management of volumes pools.')%>'
150 </prop:Attributes.onmouseover>
151 <prop:ClientSide.OnLoading>
152 SlideWindow.getObj('PoolWindow').showProgress(true);
153 </prop:ClientSide.OnLoading>
154 <prop:ClientSide.OnComplete>
155 SlideWindow.getObj('PoolWindow').setWindowElementsEvent({
156 repeater_id: '<%=$this->PoolWindow->Repeater->ClientID%>',
157 grid_id: '<%=$this->PoolWindow->DataGrid->ClientID%>',
158 request_obj: <%=$this->PoolWindow->DataElementCall->ActiveControl->Javascript%>
160 </prop:ClientSide.OnComplete>
162 <com:TActiveButton ID="JobBtn" CssClass="job-btn">
163 <prop:Attributes.onmouseover>
166 '<%=Prado::localize('Jobs')%>',
167 '<%=Prado::localize('Jobs settings.')%>'
169 </prop:Attributes.onmouseover>
170 <prop:ClientSide.OnLoading>
171 SlideWindow.getObj('JobWindow').showProgress(true);
172 </prop:ClientSide.OnLoading>
173 <prop:ClientSide.OnComplete>
174 SlideWindow.getObj('JobWindow').setWindowElementsEvent({
175 repeater_id: '<%=$this->JobWindow->Repeater->ClientID%>',
176 grid_id: '<%=$this->JobWindow->DataGrid->ClientID%>',
177 request_obj: <%=$this->JobWindow->DataElementCall->ActiveControl->Javascript%>,
178 actions_obj: <%=$this->JobWindow->RunJobCall->ActiveControl->Javascript%>
180 </prop:ClientSide.OnComplete>
182 <com:TActiveButton ID="JobRunBtn" CssClass="jobrun-btn">
183 <prop:Attributes.onmouseover>
186 '<%=Prado::localize('Run job')%>',
187 '<%=Prado::localize('Starting jobs.')%>'
189 </prop:Attributes.onmouseover>
190 <prop:ClientSide.OnLoading>
191 SlideWindow.getObj('JobRunWindow').showProgress(true);
192 </prop:ClientSide.OnLoading>
193 <prop:ClientSide.OnComplete>
194 SlideWindow.getObj('JobRunWindow').setWindowElementsEvent({
195 repeater_id: '<%=$this->JobRunWindow->Repeater->ClientID%>',
196 grid_id: '<%=$this->JobRunWindow->DataGrid->ClientID%>',
197 request_obj: <%=$this->JobRunWindow->DataElementCall->ActiveControl->Javascript%>
199 </prop:ClientSide.OnComplete>
201 <com:TActiveButton CssClass="restore-btn" OnClick="restore">
202 <prop:Attributes.onmouseover>
205 '<%=Prado::localize('Restore')%>',
206 '<%=Prado::localize('Restore wizard.')%>'
208 </prop:Attributes.onmouseover>
210 <com:TActiveButton ID="SettingsWizardBtn" CssClass="setting-btn" OnClick="configuration">
211 <prop:Attributes.onmouseover>
214 '<%=Prado::localize('Settings')%>',
215 '<%=Prado::localize('Management settings wizard.')%>'
217 </prop:Attributes.onmouseover>
220 <com:TActivePanel ID="Content">
222 <com:Application.Portlets.StorageList ID="StorageWindow" ButtonID="<%=$this->StorageBtn->ClientID%>" WindowTitle="<%[ Storage Daemons ]%>" />
223 <com:Application.Portlets.ClientList ID="ClientWindow" ButtonID="<%=$this->ClientBtn->ClientID%>" WindowTitle="<%[ Clients ]%>" />
224 <com:Application.Portlets.VolumeList ID="VolumeWindow" ButtonID="<%=$this->VolumeBtn->ClientID%>" WindowTitle="<%[ Volumes ]%>" />
225 <com:Application.Portlets.PoolList ID="PoolWindow" ButtonID="<%=$this->PoolBtn->ClientID%>" WindowTitle="<%[ Pools ]%>" />
226 <com:Application.Portlets.JobList ID="JobWindow" ButtonID="<%=$this->JobBtn->ClientID%>" WindowTitle="<%[ Jobs ]%>" />
227 <com:Application.Portlets.JobRunList ID="JobRunWindow" ButtonID="<%=$this->JobRunBtn->ClientID%>" WindowTitle="<%[ Jobs for run ]%>" />
228 <div id="configuration">
229 <div id="configuration-box">
230 <div id="configuration-progress" class="configuration-progress"></div>
232 <com:Application.Portlets.VolumeConfiguration ID="VolumeConfiguration" />
233 <com:Application.Portlets.StorageConfiguration ID="StorageConfiguration" />
234 <com:Application.Portlets.ClientConfiguration ID="ClientConfiguration" />
235 <com:Application.Portlets.PoolConfiguration ID="PoolConfiguration" />
236 <com:Application.Portlets.JobConfiguration ID="JobConfiguration" />
237 <com:Application.Portlets.JobRunConfiguration ID="JobRunConfiguration" />
242 <div id="graphs" style="display: none;">
243 <select id="time_range" name="time_range">
244 <option value="23400"><%[ Last 6 hours ]%></option>
245 <option value="43200"><%[ Last 12 hours ]%></option>
246 <option value="86400" selected="selected"><%[ Today ]%></option>
247 <option value="172800"><%[ Two days ]%></option>
248 <option value="604800"><%[ Last week ]%></option>
249 <option value="1209600"><%[ Last two weeks ]%></option>
250 <option value="2592000"><%[ Last month ]%></option>
251 <option value="7776000"><%[ Last three months ]%></option>
252 <option value="15768000"><%[ Last six months ]%></option>
253 <option value="31536000"><%[ Last year ]%></option>
256 <%[ Date From: ]%> <com:TDatePicker ID="DateFrom" DateFormat="yyyy-MM-dd" Width="80px" />
257 <%[ Date To: ]%> <com:TDatePicker ID="DateTo" DateFormat="yyyy-MM-dd" Width="80px" />
259 <span><%[ Client: ]%></span>
260 <com:TActiveDropDownList ID="Clients" CssClass="textbox" AutoPostBack="false" Width="160px" Style="display: inline" />
261 <span><%[ Job name: ]%></span>
262 <com:TActiveDropDownList ID="Jobs" CssClass="textbox" AutoPostBack="false" Width="160px" Style="display: inline" />
263 <p><%[ Legend: ]%></p>
264 <div id="legend"></div>
265 <div id="graphs_content">
266 <script type="text/javascript">
267 var jobs = <%=$this->getJobs()%>;
270 <script type="text/javascript">
272 "graph_title": "<%[ Graph: Jobs size / Time ]%>",
273 "xaxis_title": "<%[ Time ]%>",
274 "yaxis_title": "<%[ Jobs size (GiB) ]%>"
277 document.observe("dom:loaded", function() {
278 PanelWindow.onShow = function() {
279 if (PanelWindow.currentWindowId === 'graphs' && typeof(graph) == "undefined") {
280 graph = new GraphClass(jobs, graph_lang, 'graphs_content', 'legend', 'time_range', '<%=$this->DateFrom->ClientID%>', '<%=$this->DateTo->ClientID%>', '<%=$this->Clients->ClientID%>', '<%=$this->Jobs->ClientID%>');
281 } else if (PanelWindow.currentWindowId === 'dashboard') {
282 Dashboard.update_all(Statistics, TEXT);
287 <p class="right bold italic"><%[ Tip: for getting zoom, please mark area on graph. ]%></p>
288 <p class="right bold italic"><%[ Tip 2: for back from zoom, please click somewhere on graph. ]%></p>
290 <div id="users" style="display: none">
292 <a href="javascript:void(0)" id="add_user_btn"><strong><%[ Add new user ]%></strong></a>
293 <div id="add_user" style="display: none">
294 <p><%[ Username: ]%><input id="newuser" type="text" /><%[ Password: ]%><input id="newpwd" type="password" />
295 <a href="javascript:void(0)" onclick="Users.addUser()">
296 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ Save ]%>" title="<%[ Save ]%>"/>
298 <a href="javascript:void(0)" onclick="Users.cancelAddUser()">
299 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Close ]%>" title="<%[ Close ]%>" />
302 <com:TActiveRepeater ID="UsersList">
303 <prop:HeaderTemplate>
304 <table id="users_list" class="window-section-detail-smallrow">
306 <th><%[ User name ]%></th>
307 <th><%[ Role ]%></th>
308 <th><%[ Actions ]%></th>
310 </prop:HeaderTemplate>
312 <tr class="slide-window-element">
313 <td><%=$this->DataItem%></td>
314 <td><%=$this->User->getName() == $this->DataItem ? Prado::localize('Administrator') : Prado::localize('Normal user')%></td>
316 <a href="javascript:void(0)" <%=$this->User->getName() == $this->DataItem ? 'style="visibility: hidden"' : ''%> onclick="Users.rmUser('<%=$this->DataItem%>')"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/user-del.png"> <%[ Remove user ]%></a>
317 <a href="javascript:void(0)" onclick="Users.showChangePwd(this)" rel="chpwd_btn">
318 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/key.png" alt="" />
319 <%[ Change password ]%>
321 <span style="display: none;" rel="chpwd">
322 <input type="password" onkeydown="event.keyCode == 13 ? Users.changePwd(this, '<%=$this->DataItem%>') : (event.keyCode == 27 ? Users.cancelChangePwd(this.nextElementSibling.nextElementSibling) : '');" />
323 <a href="javascript:void(0)" onclick="Users.changePwd(this.prevousElementSibling, '<%=$this->DataItem%>')">
324 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_ok.png" alt="<%[ Save ]%>" title="<%[ Save ]%>"/>
326 <a href="javascript:void(0)" onclick="Users.cancelChangePwd(this)">
327 <img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/icon_err.png" alt="<%[ Close ]%>" title="<%[ Close ]%>" />
333 <prop:FooterTemplate>
335 </prop:FooterTemplate>
336 </com:TActiveRepeater>
337 <p><em><%[ Please note that for each user (excluding administrator) there should exist separate Bconsole config file in form: ]%> <strong><com:TLabel ID="BconsoleCustomPath" /></strong></em></p>
338 <com:TCallback ID="UserAction" OnCallback="userAction" />
339 <script type="text/javascript">
340 var send_user_action = function(action, param, value) {
344 var user_action_callback = <%=$this->UserAction->ActiveControl->Javascript%>;
345 user_action_callback.ActiveControl.CallbackParameter = [action, param, value].join(';');
346 user_action_callback.dispatch();
349 enter_login: '<%[ Please enter login. ]%>',
350 invalid_pwd: '<%[ Password must be longer than 4 chars. ]%>'
352 Users.action_callback = send_user_action;
358 <a id="clear_bvfs_cache" href="javascript: void(0)"><com:TActiveImageButton ID="ClearBvfsCache" OnCallback="clearBvfsCache" Attributes.onclick="return (confirm('<%=Prado::localize('This action will clear bvfs cache that was created during preparing restore files. There is not recommended use this action during restore job working. Are you sure?')%>'));" ImageUrl="<%=$this->getPage()->getTheme()->getBaseUrl()%>/trash_icon.png" AlternateText="<%[ clear bvfs cache ]%>" /><com:TLabel ForControl="ClearBvfsCache"><%[ clear bvfs cache ]%></com:TLabel></a>
359 <a id="logging" href="javascript:void(0)"><com:TActiveCheckBox ID="Logging" OnCallback="setDebug" Attributes.onclick="return (this.checked === false || confirm('<%=Prado::localize('Debug files enable possibility to save most of actions executed on Baculum WebGUI. Debug functionality should be enabled if is happening shomething wrong with Baculum or something that looks like a bug. Logs can be useful for detecting a problems in Baculum working. After confirmation this message Baculum debug files will be continuously saving in /protected/Data/ directory. Are you sure?')%>'));" /><com:TLabel ForControl="Logging"><%[ Enable debug ]%></com:TLabel></a>
360 <a id="volumes_tools_launcher" href="javascript:void(0)" <%=$this->User->getIsAdmin() === false ? ' style="display: none;"' : ''%>><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/tape_tools_icon.png" alt="<%[ volumes tools ]%>" /><span><%[ volumes tools ]%></span></a>
361 <a id="console_launcher" href="javascript:void(0)"><img src="<%=$this->getPage()->getTheme()->getBaseUrl()%>/console_icon.png" alt="<%[ Bacula console ]%>" /><span><%[ show console ]%></span></a>
362 <com:Application.Portlets.VolumesTools ID="VolumesTools" />
363 <com:Application.Portlets.Console ID="Console" />
365 <div id="bottom"></div>
366 <script type="text/javascript">
368 document.observe("dom:loaded", function() {
369 <%=(!is_null($this->initWindowId) && !is_null($this->initElementId) ?
370 'SlideWindow.getObj("' . $this->initWindowId . 'Window").setInitElementId("' . $this->initElementId . '");'
372 <%=(!is_null($this->openWindow) ?
373 'PanelWindow.show("container");
374 $("' . $this->openWindow . '").click();
375 window.history.pushState("", "", "/");'
379 level: '<%[ level ]%>',
380 status: '<%[ status ]%>',
381 starttime: '<%[ start time ]%>'