blob: fec8572fc094f4f90ef964de42b026aba1bbf355 [file] [log] [blame]
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001/**
2 * API utilities service
3 *
4 * @module app/common/services/api-utils
5 * @exports APIUtils
6 * @name APIUtils
Iftekharul Islam99d199f2017-03-24 15:28:25 -05007 */
8
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07009window.angular && (function(angular) {
10 'use strict';
Andrew Geisslerd27bb132018-05-24 11:07:27 -070011 angular.module('app.common.services').factory('APIUtils', [
12 '$http', 'Constants', '$q', 'dataService',
13 function($http, Constants, $q, DataService) {
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070014 var getScaledValue = function(value, scale) {
15 scale = scale + '';
16 scale = parseInt(scale, 10);
17 var power = Math.abs(parseInt(scale, 10));
CamVan Nguyen33275832018-03-13 18:38:37 -050018
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070019 if (scale > 0) {
20 value = value * Math.pow(10, power);
Andrew Geisslerd27bb132018-05-24 11:07:27 -070021 } else if (scale < 0) {
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070022 value = value / Math.pow(10, power);
23 }
24 return value;
25 };
26 var SERVICE = {
27 API_CREDENTIALS: Constants.API_CREDENTIALS,
28 API_RESPONSE: Constants.API_RESPONSE,
29 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
30 HOST_STATE_TEXT: Constants.HOST_STATE,
31 HOST_STATE: Constants.HOST_STATE,
32 LED_STATE: Constants.LED_STATE,
33 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
34 HOST_SESSION_STORAGE_KEY: Constants.API_CREDENTIALS.host_storage_key,
35 getChassisState: function() {
36 var deferred = $q.defer();
37 $http({
38 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -070039 url: DataService.getHost() +
40 '/xyz/openbmc_project/state/chassis0/attr/CurrentPowerState',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070041 headers: {
42 'Accept': 'application/json',
43 'Content-Type': 'application/json'
44 },
45 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -070046 })
47 .then(
48 function(response) {
49 var json = JSON.stringify(response.data);
50 var content = JSON.parse(json);
51 deferred.resolve(content.data);
52 },
53 function(error) {
54 console.log(error);
55 deferred.reject(error);
56 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070057 return deferred.promise;
58 },
59 getHostState: function() {
60 var deferred = $q.defer();
61 $http({
62 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -070063 url: DataService.getHost() +
64 '/xyz/openbmc_project/state/host0/attr/CurrentHostState',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070065 headers: {
66 'Accept': 'application/json',
67 'Content-Type': 'application/json'
68 },
69 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -070070 })
71 .then(
72 function(response) {
73 var json = JSON.stringify(response.data);
74 var content = JSON.parse(json);
75 deferred.resolve(content.data);
76 },
77 function(error) {
78 console.log(error);
79 deferred.reject(error);
80 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070081 return deferred.promise;
82 },
83 getNetworkInfo: function() {
84 var deferred = $q.defer();
85 $http({
86 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -070087 url: DataService.getHost() +
88 '/xyz/openbmc_project/network/enumerate',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -070089 headers: {
90 'Accept': 'application/json',
91 'Content-Type': 'application/json'
92 },
93 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -070094 })
95 .then(
96 function(response) {
97 var json = JSON.stringify(response.data);
98 var content = JSON.parse(json);
99 var hostname = '';
100 var macAddress = '';
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700101
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700102 function parseNetworkData(content) {
103 var data = {
104 interface_ids: [],
105 interfaces: {},
106 ip_addresses: {ipv4: [], ipv6: []},
107 };
108 var interfaceId = '', keyParts = [], interfaceHash = '',
109 interfaceType = '';
110 for (var key in content.data) {
111 if (key.match(/network\/eth\d+$/ig)) {
112 interfaceId = key.split('/').pop();
113 if (data.interface_ids.indexOf(interfaceId) == -1) {
114 data.interface_ids.push(interfaceId);
115 data.interfaces[interfaceId] = {
116 interfaceIname: '',
117 DomainName: '',
118 MACAddress: '',
119 Nameservers: [],
120 DHCPEnabled: 0,
121 ipv4: {ids: [], values: []},
122 ipv6: {ids: [], values: []}
123 };
124 data.interfaces[interfaceId].MACAddress =
125 content.data[key].MACAddress;
126 data.interfaces[interfaceId].DomainName =
127 content.data[key].DomainName.join(' ');
128 data.interfaces[interfaceId].Nameservers =
129 content.data[key].Nameservers;
130 data.interfaces[interfaceId].DHCPEnabled =
131 content.data[key].DHCPEnabled;
132 }
133 } else if (
134 key.match(
135 /network\/eth\d+\/ipv[4|6]\/[a-z0-9]+$/ig)) {
136 keyParts = key.split('/');
137 interfaceHash = keyParts.pop();
138 interfaceType = keyParts.pop();
139 interfaceId = keyParts.pop();
140
141 if (data.interfaces[interfaceId][interfaceType]
142 .ids.indexOf(interfaceHash) == -1) {
143 data.interfaces[interfaceId][interfaceType]
144 .ids.push(interfaceHash);
145 data.interfaces[interfaceId][interfaceType]
146 .values.push(content.data[key]);
147 data.ip_addresses[interfaceType].push(
148 content.data[key]['Address']);
149 }
150 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700151 }
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700152 return data;
153 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700154
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700155 if (content.data.hasOwnProperty(
156 '/xyz/openbmc_project/network/config') &&
157 content.data['/xyz/openbmc_project/network/config']
158 .hasOwnProperty('HostName')) {
159 hostname =
160 content.data['/xyz/openbmc_project/network/config']
161 .HostName;
162 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700163
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700164 if (content.data.hasOwnProperty(
165 '/xyz/openbmc_project/network/eth0') &&
166 content.data['/xyz/openbmc_project/network/eth0']
167 .hasOwnProperty('MACAddress')) {
168 macAddress =
169 content.data['/xyz/openbmc_project/network/eth0']
170 .MACAddress;
171 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700172
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700173 deferred.resolve({
174 data: content.data,
175 hostname: hostname,
176 mac_address: macAddress,
177 formatted_data: parseNetworkData(content)
178 });
179 },
180 function(error) {
181 console.log(error);
182 deferred.reject(error);
183 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700184 return deferred.promise;
185 },
186 getLEDState: function() {
187 var deferred = $q.defer();
188 $http({
189 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700190 url: DataService.getHost() +
191 '/xyz/openbmc_project/led/groups/enclosure_identify',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700192 headers: {
193 'Accept': 'application/json',
194 'Content-Type': 'application/json'
195 },
196 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700197 })
198 .then(
199 function(response) {
200 var json = JSON.stringify(response.data);
201 var content = JSON.parse(json);
202 deferred.resolve(content.data.Asserted);
203 },
204 function(error) {
205 console.log(error);
206 deferred.reject(error);
207 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700208 return deferred.promise;
209 },
210 login: function(username, password, callback) {
211 $http({
212 method: 'POST',
213 url: DataService.getHost() + '/login',
214 headers: {
215 'Accept': 'application/json',
216 'Content-Type': 'application/json'
217 },
218 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700219 data: JSON.stringify({'data': [username, password]})
220 })
221 .then(
222 function(response) {
223 if (callback) {
224 callback(response.data);
225 }
226 },
227 function(error) {
228 if (callback) {
229 if (error && error.status && error.status == 'error') {
230 callback(error);
231 } else {
232 callback(error, true);
233 }
234 }
235 console.log(error);
236 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700237 },
238 testPassword: function(username, password) {
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700239 // Calls /login without the current session to verify the given
240 // password is correct ignore the interceptor logout on a bad password
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700241 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700242 method: 'POST',
243 url: DataService.getHost() + '/login',
244 headers: {
245 'Accept': 'application/json',
246 'Content-Type': 'application/json'
247 },
248 withCredentials: false,
249 data: JSON.stringify({'data': [username, password]})
250 })
251 .then(function(response) {
252 return response.data;
253 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700254 },
255 logout: function(callback) {
256 $http({
257 method: 'POST',
258 url: DataService.getHost() + '/logout',
259 headers: {
260 'Accept': 'application/json',
261 'Content-Type': 'application/json'
262 },
263 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700264 data: JSON.stringify({'data': []})
265 })
266 .then(
267 function(response) {
268 if (callback) {
269 callback(response.data);
270 }
271 },
272 function(error) {
273 if (callback) {
274 callback(null, error);
275 }
276 console.log(error);
277 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700278 },
279 changePassword: function(user, newPassword) {
280 var deferred = $q.defer();
281 $http({
282 method: 'POST',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700283 url: DataService.getHost() + '/xyz/openbmc_project/user/' + user +
284 '/action/SetPassword',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700285 headers: {
286 'Accept': 'application/json',
287 'Content-Type': 'application/json'
288 },
289 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700290 data: JSON.stringify({'data': [newPassword]}),
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700291 responseType: 'arraybuffer'
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700292 })
293 .then(
294 function(response, status, headers) {
295 deferred.resolve(
296 {data: response, status: status, headers: headers});
297 },
298 function(error) {
299 console.log(error);
300 deferred.reject(error);
301 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700302 return deferred.promise;
303 },
304 chassisPowerOn: function(callback) {
305 $http({
306 method: 'POST',
307 url: DataService.getHost() + '/xyz/openbmc_project/state/host0',
308 headers: {
309 'Accept': 'application/json',
310 'Content-Type': 'application/json'
311 },
312 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700313 data: JSON.stringify({'data': []})
314 })
315 .then(
316 function(response) {
317 var json = JSON.stringify(response.data);
318 var content = JSON.parse(json);
319 if (callback) {
320 return callback(content.data.CurrentPowerState);
321 }
322 },
323 function(error) {
324 if (callback) {
325 callback(error);
326 } else {
327 console.log(error);
328 }
329 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700330 },
331 chassisPowerOff: function() {
332 var deferred = $q.defer();
333 $http({
334 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700335 url: DataService.getHost() +
336 '/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700337 headers: {
338 'Accept': 'application/json',
339 'Content-Type': 'application/json'
340 },
341 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700342 data: JSON.stringify(
343 {'data': 'xyz.openbmc_project.State.Chassis.Transition.Off'})
344 })
345 .then(
346 function(response) {
347 var json = JSON.stringify(response.data);
348 var content = JSON.parse(json);
349 deferred.resolve(content.status);
350 },
351 function(error) {
352 console.log(error);
353 deferred.reject(error);
354 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700355 return deferred.promise;
356 },
357 setLEDState: function(state, callback) {
358 $http({
359 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700360 url: DataService.getHost() +
361 '/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700362 headers: {
363 'Accept': 'application/json',
364 'Content-Type': 'application/json'
365 },
366 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700367 data: JSON.stringify({'data': state})
368 })
369 .then(
370 function(response) {
371 var json = JSON.stringify(response.data);
372 var content = JSON.parse(json);
373 if (callback) {
374 return callback(content.status);
375 }
376 },
377 function(error) {
378 if (callback) {
379 callback(error);
380 } else {
381 console.log(error);
382 }
383 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700384 },
385 bmcReboot: function(callback) {
386 $http({
387 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700388 url: DataService.getHost() +
389 '/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700390 headers: {
391 'Accept': 'application/json',
392 'Content-Type': 'application/json'
393 },
394 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700395 data: JSON.stringify(
396 {'data': 'xyz.openbmc_project.State.BMC.Transition.Reboot'})
397 })
398 .then(
399 function(response) {
400 var json = JSON.stringify(response.data);
401 var content = JSON.parse(json);
402 if (callback) {
403 return callback(content.status);
404 }
405 },
406 function(error) {
407 if (callback) {
408 callback(error);
409 } else {
410 console.log(error);
411 }
412 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700413 },
414 hostPowerOn: function() {
415 var deferred = $q.defer();
416 $http({
417 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700418 url: DataService.getHost() +
419 '/xyz/openbmc_project/state/host0/attr/RequestedHostTransition',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700420 headers: {
421 'Accept': 'application/json',
422 'Content-Type': 'application/json'
423 },
424 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700425 data: JSON.stringify(
426 {'data': 'xyz.openbmc_project.State.Host.Transition.On'})
427 })
428 .then(
429 function(response) {
430 var json = JSON.stringify(response.data);
431 var content = JSON.parse(json);
432 deferred.resolve(content.status);
433 },
434 function(error) {
435 console.log(error);
436 deferred.reject(error);
437 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700438 return deferred.promise;
439 },
440 hostPowerOff: function() {
441 var deferred = $q.defer();
442 $http({
443 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700444 url: DataService.getHost() +
445 '/xyz/openbmc_project/state/host0/attr/RequestedHostTransition',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700446 headers: {
447 'Accept': 'application/json',
448 'Content-Type': 'application/json'
449 },
450 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700451 data: JSON.stringify(
452 {'data': 'xyz.openbmc_project.State.Host.Transition.Off'})
453 })
454 .then(
455 function(response) {
456 var json = JSON.stringify(response.data);
457 var content = JSON.parse(json);
458 deferred.resolve(content.status);
459 },
460 function(error) {
461 console.log(error);
462 deferred.reject(error);
463 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700464 return deferred.promise;
465 },
466 hostReboot: function() {
467 var deferred = $q.defer();
468 $http({
469 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700470 url: DataService.getHost() +
471 '/xyz/openbmc_project/state/host0/attr/RequestedHostTransition',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700472 headers: {
473 'Accept': 'application/json',
474 'Content-Type': 'application/json'
475 },
476 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700477 data: JSON.stringify(
478 {'data': 'xyz.openbmc_project.State.Host.Transition.Reboot'})
479 })
480 .then(
481 function(response) {
482 var json = JSON.stringify(response.data);
483 var content = JSON.parse(json);
484 deferred.resolve(content.status);
485 },
486 function(error) {
487 console.log(error);
488 deferred.reject(error);
489 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700490
491 return deferred.promise;
492 },
493 hostShutdown: function(callback) {
494 $http({
495 method: 'POST',
496 url: DataService.getHost() + '/xyz/openbmc_project/state/host0',
497 headers: {
498 'Accept': 'application/json',
499 'Content-Type': 'application/json'
500 },
501 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700502 data: JSON.stringify({'data': []})
503 })
504 .then(
505 function(response) {
506 var json = JSON.stringify(response.data);
507 var content = JSON.parse(json);
508 if (callback) {
509 return callback(content);
510 }
511 },
512 function(error) {
513 if (callback) {
514 callback(error);
515 } else {
516 console.log(error);
517 }
518 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700519 },
520 getLogs: function() {
521 var deferred = $q.defer();
522 $http({
523 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700524 url: DataService.getHost() +
525 '/xyz/openbmc_project/logging/enumerate',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700526 headers: {
527 'Accept': 'application/json',
528 'Content-Type': 'application/json'
529 },
530 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700531 })
532 .then(
533 function(response) {
534 var json = JSON.stringify(response.data);
535 var content = JSON.parse(json);
536 var dataClone = JSON.parse(JSON.stringify(content.data));
537 var data = [];
538 var severityCode = '';
539 var priority = '';
540 var health = '';
541 var relatedItems = [];
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700542
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700543 for (var key in content.data) {
544 if (content.data.hasOwnProperty(key) &&
545 content.data[key].hasOwnProperty('Id')) {
546 var severityFlags = {
547 low: false,
548 medium: false,
549 high: false
550 };
551 var healthFlags = {
552 critical: false,
553 warning: false,
554 good: false
555 };
556 severityCode =
557 content.data[key].Severity.split('.').pop();
558 priority =
559 Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
560 severityFlags[priority.toLowerCase()] = true;
561 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
562 healthFlags[health.toLowerCase()] = true;
563 relatedItems = [];
564 content.data[key].associations.forEach(function(item) {
565 relatedItems.push(item[2]);
566 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700567
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700568 data.push(Object.assign(
569 {
570 path: key,
571 copied: false,
572 priority: priority,
573 severity_code: severityCode,
574 severity_flags: severityFlags,
575 health_flags: healthFlags,
576 additional_data:
577 content.data[key].AdditionalData.join('\n'),
578 type: content.data[key].Message,
579 selected: false,
580 search_text:
581 ('#' + content.data[key].Id + ' ' +
582 severityCode + ' ' +
583 content.data[key].Severity + ' ' +
584 content.data[key].AdditionalData.join(' '))
585 .toLowerCase(),
586 meta: false,
587 confirm: false,
588 related_items: relatedItems,
589 data: {key: key, value: content.data[key]}
590 },
591 content.data[key]));
592 }
593 }
594 deferred.resolve({data: data, original: dataClone});
595 },
596 function(error) {
597 console.log(error);
598 deferred.reject(error);
599 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700600
601 return deferred.promise;
602 },
603 getAllSensorStatus: function(callback) {
604 $http({
605 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700606 url: DataService.getHost() +
607 '/xyz/openbmc_project/sensors/enumerate',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700608 headers: {
609 'Accept': 'application/json',
610 'Content-Type': 'application/json'
611 },
612 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700613 })
614 .then(
615 function(response) {
616 var json = JSON.stringify(response.data);
617 var content = JSON.parse(json);
618 var dataClone = JSON.parse(JSON.stringify(content.data));
619 var sensorData = [];
620 var severity = {};
621 var title = '';
622 var tempKeyParts = [];
623 var order = 0;
624 var customOrder = 0;
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700625
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700626 function getSensorStatus(reading) {
627 var severityFlags = {
628 critical: false,
629 warning: false,
630 normal: false
631 },
632 severityText = '', order = 0;
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700633
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700634 if (reading.hasOwnProperty('CriticalLow') &&
635 reading.Value < reading.CriticalLow) {
636 severityFlags.critical = true;
637 severityText = 'critical';
638 order = 2;
639 } else if (
640 reading.hasOwnProperty('CriticalHigh') &&
641 reading.Value > reading.CriticalHigh) {
642 severityFlags.critical = true;
643 severityText = 'critical';
644 order = 2;
645 } else if (
646 reading.hasOwnProperty('CriticalLow') &&
647 reading.hasOwnProperty('WarningLow') &&
648 reading.Value >= reading.CriticalLow &&
649 reading.Value <= reading.WarningLow) {
650 severityFlags.warning = true;
651 severityText = 'warning';
652 order = 1;
653 } else if (
654 reading.hasOwnProperty('WarningHigh') &&
655 reading.hasOwnProperty('CriticalHigh') &&
656 reading.Value >= reading.WarningHigh &&
657 reading.Value <= reading.CriticalHigh) {
658 severityFlags.warning = true;
659 severityText = 'warning';
660 order = 1;
661 } else {
662 severityFlags.normal = true;
663 severityText = 'normal';
664 }
665 return {
666 flags: severityFlags,
667 severityText: severityText,
668 order: order
669 };
670 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700671
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700672 for (var key in content.data) {
673 if (content.data.hasOwnProperty(key) &&
674 content.data[key].hasOwnProperty('Unit')) {
675 severity = getSensorStatus(content.data[key]);
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700676
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700677 if (!content.data[key].hasOwnProperty('CriticalLow')) {
678 content.data[key].CriticalLow = '--';
679 content.data[key].CriticalHigh = '--';
680 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700681
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700682 if (!content.data[key].hasOwnProperty('WarningLow')) {
683 content.data[key].WarningLow = '--';
684 content.data[key].WarningHigh = '--';
685 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700686
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700687 tempKeyParts = key.split('/');
688 title = tempKeyParts.pop();
689 title = tempKeyParts.pop() + '_' + title;
690 title = title.split('_')
691 .map(function(item) {
692 return item.toLowerCase()
693 .charAt(0)
694 .toUpperCase() +
695 item.slice(1);
696 })
697 .reduce(function(prev, el) {
698 return prev + ' ' + el;
699 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700700
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700701 content.data[key].Value = getScaledValue(
702 content.data[key].Value, content.data[key].Scale);
703 content.data[key].CriticalLow = getScaledValue(
704 content.data[key].CriticalLow,
705 content.data[key].Scale);
706 content.data[key].CriticalHigh = getScaledValue(
707 content.data[key].CriticalHigh,
708 content.data[key].Scale);
709 content.data[key].WarningLow = getScaledValue(
710 content.data[key].WarningLow,
711 content.data[key].Scale);
712 content.data[key].WarningHigh = getScaledValue(
713 content.data[key].WarningHigh,
714 content.data[key].Scale);
715 if (Constants.SENSOR_SORT_ORDER.indexOf(
716 content.data[key].Unit) > -1) {
717 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(
718 content.data[key].Unit);
719 } else {
720 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
721 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700722
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700723 sensorData.push(Object.assign(
724 {
725 path: key,
726 selected: false,
727 confirm: false,
728 copied: false,
729 title: title,
730 unit:
731 Constants
732 .SENSOR_UNIT_MAP[content.data[key].Unit],
733 severity_flags: severity.flags,
734 status: severity.severityText,
735 order: severity.order,
736 custom_order: customOrder,
737 search_text:
738 (title + ' ' + content.data[key].Value + ' ' +
739 Constants.SENSOR_UNIT_MAP[content.data[key]
740 .Unit] +
741 ' ' + severity.severityText + ' ' +
742 content.data[key].CriticalLow + ' ' +
743 content.data[key].CriticalHigh + ' ' +
744 content.data[key].WarningLow + ' ' +
745 content.data[key].WarningHigh + ' ')
746 .toLowerCase(),
747 original_data:
748 {key: key, value: content.data[key]}
749 },
750 content.data[key]));
751 }
752 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700753
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700754 callback(sensorData, dataClone);
755 },
756 function(error) {
757 console.log(error);
758 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700759 },
760 getActivation: function(imageId) {
761 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700762 method: 'GET',
763 url: DataService.getHost() +
764 '/xyz/openbmc_project/software/' + imageId +
765 '/attr/Activation',
766 headers: {
767 'Accept': 'application/json',
768 'Content-Type': 'application/json'
769 },
770 withCredentials: true
771 })
772 .then(function(response) {
773 return response.data;
774 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700775 },
776 getFirmwares: function() {
777 var deferred = $q.defer();
778 $http({
779 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700780 url: DataService.getHost() +
781 '/xyz/openbmc_project/software/enumerate',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700782 headers: {
783 'Accept': 'application/json',
784 'Content-Type': 'application/json'
785 },
786 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700787 })
788 .then(
789 function(response) {
790 var json = JSON.stringify(response.data);
791 var content = JSON.parse(json);
792 var data = [];
793 var activationStatus = '';
794 var isExtended = false;
795 var bmcActiveVersion = '';
796 var hostActiveVersion = '';
797 var imageType = '';
798 var extendedVersions = [];
799 var functionalImages = [];
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700800
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700801 function getFormatedExtendedVersions(extendedVersion) {
802 var versions = [];
803 extendedVersion = extendedVersion.split(',');
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700804
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700805 extendedVersion.forEach(function(item) {
806 var parts = item.split('-');
807 var numberIndex = 0;
808 for (var i = 0; i < parts.length; i++) {
809 if (/[0-9]/.test(parts[i])) {
810 numberIndex = i;
811 break;
812 }
813 }
814 var titlePart = parts.splice(0, numberIndex);
815 titlePart = titlePart.join('');
816 titlePart = titlePart[0].toUpperCase() +
817 titlePart.substr(1, titlePart.length);
818 var versionPart = parts.join('-');
819 versions.push({title: titlePart, version: versionPart});
820 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700821
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700822 return versions;
823 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700824
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700825 // Get the list of functional images so we can compare
826 // later if an image is functional
827 if (content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH]) {
828 functionalImages =
829 content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH]
830 .endpoints;
831 }
832 for (var key in content.data) {
833 if (content.data.hasOwnProperty(key) &&
834 content.data[key].hasOwnProperty('Version')) {
835 // If the image is "Functional" use that for the
836 // activation status, else use the value of "Activation"
837 // github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
838 activationStatus =
839 content.data[key].Activation.split('.').pop();
840 if (functionalImages.includes(key)) {
841 activationStatus = 'Functional';
842 }
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700843
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700844 imageType = content.data[key].Purpose.split('.').pop();
845 isExtended = content.data[key].hasOwnProperty(
846 'ExtendedVersion') &&
847 content.data[key].ExtendedVersion != '';
848 if (isExtended) {
849 extendedVersions = getFormatedExtendedVersions(
850 content.data[key].ExtendedVersion);
851 }
852 data.push(Object.assign(
853 {
854 path: key,
855 activationStatus: activationStatus,
856 imageId: key.split('/').pop(),
857 imageType: imageType,
858 isExtended: isExtended,
859 extended:
860 {show: false, versions: extendedVersions},
861 data: {key: key, value: content.data[key]}
862 },
863 content.data[key]));
864
865 if (activationStatus == 'Functional' &&
866 imageType == 'BMC') {
867 bmcActiveVersion = content.data[key].Version;
868 }
869
870 if (activationStatus == 'Functional' &&
871 imageType == 'Host') {
872 hostActiveVersion = content.data[key].Version;
873 }
874 }
875 }
876
877 deferred.resolve({
878 data: data,
879 bmcActiveVersion: bmcActiveVersion,
880 hostActiveVersion: hostActiveVersion
881 });
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500882 },
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700883 function(error) {
884 console.log(error);
885 deferred.reject(error);
886 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700887
888 return deferred.promise;
889 },
890 changePriority: function(imageId, priority) {
891 var deferred = $q.defer();
892 $http({
893 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700894 url: DataService.getHost() + '/xyz/openbmc_project/software/' +
895 imageId + '/attr/Priority',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700896 headers: {
897 'Accept': 'application/json',
898 'Content-Type': 'application/json'
899 },
900 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700901 data: JSON.stringify({'data': priority})
902 })
903 .then(
904 function(response) {
905 var json = JSON.stringify(response.data);
906 var content = JSON.parse(json);
907 deferred.resolve(content);
908 },
909 function(error) {
910 console.log(error);
911 deferred.reject(error);
912 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700913
914 return deferred.promise;
915 },
916 deleteImage: function(imageId) {
917 var deferred = $q.defer();
918 $http({
919 method: 'POST',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700920 url: DataService.getHost() + '/xyz/openbmc_project/software/' +
921 imageId + '/action/Delete',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700922 headers: {
923 'Accept': 'application/json',
924 'Content-Type': 'application/json'
925 },
926 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700927 data: JSON.stringify({'data': []})
928 })
929 .then(
930 function(response) {
931 var json = JSON.stringify(response.data);
932 var content = JSON.parse(json);
933 deferred.resolve(content);
934 },
935 function(error) {
936 console.log(error);
937 deferred.reject(error);
938 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700939
940 return deferred.promise;
941 },
942 activateImage: function(imageId) {
943 var deferred = $q.defer();
944 $http({
945 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700946 url: DataService.getHost() + '/xyz/openbmc_project/software/' +
947 imageId + '/attr/RequestedActivation',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700948 headers: {
949 'Accept': 'application/json',
950 'Content-Type': 'application/json'
951 },
952 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700953 data:
954 JSON.stringify({'data': Constants.FIRMWARE.ACTIVATE_FIRMWARE})
955 })
956 .then(
957 function(response) {
958 var json = JSON.stringify(response.data);
959 var content = JSON.parse(json);
960 deferred.resolve(content);
961 },
962 function(error) {
963 console.log(error);
964 deferred.reject(error);
965 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700966
967 return deferred.promise;
968 },
969 uploadImage: function(file) {
970 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700971 method: 'POST',
972 timeout: 5 * 60 * 1000,
973 url: DataService.getHost() + '/upload/image',
974 headers: {'Content-Type': 'application/octet-stream'},
975 withCredentials: true,
976 data: file
977 })
978 .then(function(response) {
979 return response.data;
980 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700981 },
982 downloadImage: function(host, filename) {
983 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -0700984 method: 'POST',
985 url: DataService.getHost() +
986 '/xyz/openbmc_project/software/action/DownloadViaTFTP',
987 headers: {
988 'Accept': 'application/json',
989 'Content-Type': 'application/json'
990 },
991 withCredentials: true,
992 data: JSON.stringify({'data': [filename, host]}),
993 responseType: 'arraybuffer'
994 })
995 .then(function(response) {
996 return response.data;
997 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -0700998 },
999 getBMCEthernetInfo: function() {
1000 var deferred = $q.defer();
1001 $http({
1002 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001003 url: DataService.getHost() +
1004 '/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001005 headers: {
1006 'Accept': 'application/json',
1007 'Content-Type': 'application/json'
1008 },
1009 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001010 })
1011 .then(
1012 function(response) {
1013 var json = JSON.stringify(response.data);
1014 var content = JSON.parse(json);
1015 deferred.resolve(content.data);
1016 },
1017 function(error) {
1018 console.log(error);
1019 deferred.reject(error);
1020 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001021
1022 return deferred.promise;
1023 },
1024 getBMCInfo: function(callback) {
1025 var deferred = $q.defer();
1026 $http({
1027 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001028 url: DataService.getHost() +
1029 '/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001030 headers: {
1031 'Accept': 'application/json',
1032 'Content-Type': 'application/json'
1033 },
1034 withCredentials: true
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001035 })
1036 .then(
1037 function(response) {
1038 var json = JSON.stringify(response.data);
1039 var content = JSON.parse(json);
1040 deferred.resolve(content.data);
1041 },
1042 function(error) {
1043 console.log(error);
1044 deferred.reject(error);
1045 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001046 return deferred.promise;
1047 },
1048 getServerInfo: function() {
1049 // TODO: openbmc/openbmc#3117 Need a way via REST to get
1050 // interfaces so we can get the system object(s) by the looking
1051 // for the system interface.
1052 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001053 method: 'GET',
1054 url: DataService.getHost() +
1055 '/xyz/openbmc_project/inventory/system',
1056 headers: {
1057 'Accept': 'application/json',
1058 'Content-Type': 'application/json'
1059 },
1060 withCredentials: true
1061 })
1062 .then(function(response) {
1063 return response.data;
1064 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001065 },
1066 getBMCTime: function() {
1067 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001068 method: 'GET',
1069 url: DataService.getHost() + '/xyz/openbmc_project/time/bmc',
1070 headers: {
1071 'Accept': 'application/json',
1072 'Content-Type': 'application/json'
1073 },
1074 withCredentials: true
1075 })
1076 .then(function(response) {
1077 return response.data;
1078 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001079 },
1080 getHardwares: function(callback) {
1081 $http({
1082 method: 'GET',
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001083 url: DataService.getHost() +
1084 '/xyz/openbmc_project/inventory/enumerate',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001085 headers: {
1086 'Accept': 'application/json',
1087 'Content-Type': 'application/json'
1088 },
1089 withCredentials: true
1090 }).then(function(response) {
1091 var json = JSON.stringify(response.data);
1092 var content = JSON.parse(json);
1093 var hardwareData = [];
1094 var keyIndexMap = {};
1095 var title = '';
1096 var data = [];
1097 var searchText = '';
1098 var componentIndex = -1;
1099 var tempParts = [];
1100
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001101 function isSubComponent(key) {
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001102 for (var i = 0; i < Constants.HARDWARE.parent_components.length;
1103 i++) {
1104 if (key.split(Constants.HARDWARE.parent_components[i]).length ==
1105 2)
1106 return true;
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001107 }
1108
1109 return false;
1110 }
1111
1112 function titlelize(title) {
1113 title = title.replace(/([A-Z0-9]+)/g, ' $1').replace(/^\s+/, '');
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001114 for (var i = 0; i < Constants.HARDWARE.uppercase_titles.length;
1115 i++) {
1116 if (title.toLowerCase().indexOf(
1117 (Constants.HARDWARE.uppercase_titles[i] + ' ')) > -1) {
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001118 return title.toUpperCase();
1119 }
1120 }
1121
1122 return title;
1123 }
1124
1125 function camelcaseToLabel(obj) {
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001126 var transformed = [], label = '', value = '';
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001127 for (var key in obj) {
1128 label = key.replace(/([A-Z0-9]+)/g, ' $1').replace(/^\s+/, '');
1129 if (obj[key] !== '') {
1130 value = obj[key];
1131 if (value == 1 || value == 0) {
1132 value = (value == 1) ? 'Yes' : 'No';
1133 }
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001134 transformed.push({key: label, value: value});
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001135 }
1136 }
1137
1138 return transformed;
1139 }
1140
1141 function getSearchText(data) {
1142 var searchText = '';
1143 for (var i = 0; i < data.length; i++) {
1144 searchText += ' ' + data[i].key + ' ' + data[i].value;
1145 }
1146
1147 return searchText;
1148 }
1149
1150 for (var key in content.data) {
1151 if (content.data.hasOwnProperty(key) &&
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001152 key.indexOf(Constants.HARDWARE.component_key_filter) == 0) {
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001153 data = camelcaseToLabel(content.data[key]);
1154 searchText = getSearchText(data);
1155 title = key.split('/').pop();
1156
1157 title = titlelize(title);
1158
1159 if (!isSubComponent(key)) {
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001160 hardwareData.push(Object.assign(
1161 {
1162 path: key,
1163 title: title,
1164 selected: false,
1165 expanded: false,
1166 search_text: title.toLowerCase() + ' ' +
1167 searchText.toLowerCase(),
1168 sub_components: [],
1169 original_data: {key: key, value: content.data[key]}
1170 },
1171 {items: data}));
Iftekharul Islam2a489552017-11-02 13:23:08 -05001172
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001173 keyIndexMap[key] = hardwareData.length - 1;
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001174 } else {
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001175 var tempParts = key.split('/');
1176 tempParts.pop();
1177 tempParts = tempParts.join('/');
1178 componentIndex = keyIndexMap[tempParts];
1179 data = content.data[key];
1180 data.title = title;
1181 hardwareData[componentIndex].sub_components.push(data);
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001182 hardwareData[componentIndex].search_text +=
1183 ' ' + title.toLowerCase();
Iftekharul Islam171c6a12017-08-11 08:35:47 -05001184
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001185 // Sort the subcomponents alphanumeric so they are displayed
1186 // on the inventory page in order (e.g. core 0, core 1, core
1187 // 2, ... core 12, core 13)
1188 hardwareData[componentIndex].sub_components.sort(function(
1189 a, b) {
1190 return a.title.localeCompare(
1191 b.title, 'en', {numeric: true});
Gunnar Mills55a8e392018-03-14 15:37:44 -05001192 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001193 }
1194 }
1195 }
1196
1197 if (callback) {
1198 callback(hardwareData, content.data);
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001199 } else {
1200 return {data: hardwareData, original_data: content.data};
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001201 }
1202 });
1203 },
1204 deleteLogs: function(logs) {
1205 var defer = $q.defer();
1206 var promises = [];
1207
1208 function finished() {
1209 defer.resolve();
1210 }
1211
1212 logs.forEach(function(item) {
1213 promises.push($http({
1214 method: 'POST',
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001215 url: DataService.getHost() +
1216 '/xyz/openbmc_project/logging/entry/' + item.Id +
1217 '/action/Delete',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001218 headers: {
1219 'Accept': 'application/json',
1220 'Content-Type': 'application/json'
Gunnar Mills55a8e392018-03-14 15:37:44 -05001221 },
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001222 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001223 data: JSON.stringify({'data': []})
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001224 }));
1225 });
1226
1227 $q.all(promises).then(finished);
1228
1229 return defer.promise;
1230 },
1231 resolveLogs: function(logs) {
1232 var defer = $q.defer();
1233 var promises = [];
1234
1235 function finished() {
1236 defer.resolve();
1237 }
1238
1239 logs.forEach(function(item) {
1240 promises.push($http({
1241 method: 'PUT',
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001242 url: DataService.getHost() +
1243 '/xyz/openbmc_project/logging/entry/' + item.Id +
1244 '/attr/Resolved',
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001245 headers: {
1246 'Accept': 'application/json',
1247 'Content-Type': 'application/json'
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001248 },
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001249 withCredentials: true,
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001250 data: JSON.stringify({'data': '1'})
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001251 }));
1252 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -06001253
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001254 $q.all(promises).then(finished);
Iftekharul Islamcd789502017-04-19 14:37:55 -05001255
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001256 return defer.promise;
1257 },
1258 getPowerConsumption: function() {
1259 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001260 method: 'GET',
1261 url: DataService.getHost() +
1262 '/xyz/openbmc_project/sensors/power/total_power',
1263 headers: {
1264 'Accept': 'application/json',
1265 'Content-Type': 'application/json'
1266 },
1267 withCredentials: true
1268 })
1269 .then(
1270 function(response) {
1271 var json = JSON.stringify(response.data);
1272 var content = JSON.parse(json);
Iftekharul Islamcd789502017-04-19 14:37:55 -05001273
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001274 return getScaledValue(
1275 content.data.Value, content.data.Scale) +
1276 ' ' +
1277 Constants.POWER_CONSUMPTION_TEXT[content.data.Unit];
1278 },
1279 function(error) {
1280 if ('Not Found' == error.statusText) {
1281 return Constants.POWER_CONSUMPTION_TEXT.notavailable;
1282 } else {
1283 throw error;
1284 }
1285 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001286 },
1287 getPowerCap: function() {
1288 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001289 method: 'GET',
1290 url: DataService.getHost() +
1291 '/xyz/openbmc_project/control/host0/power_cap',
1292 headers: {
1293 'Accept': 'application/json',
1294 'Content-Type': 'application/json'
1295 },
1296 withCredentials: true
1297 })
1298 .then(function(response) {
1299 var json = JSON.stringify(response.data);
1300 var content = JSON.parse(json);
Michael Davisdf3bd122017-08-10 11:03:42 -05001301
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001302 return (false == content.data.PowerCapEnable) ?
1303 Constants.POWER_CAP_TEXT.disabled :
1304 content.data.PowerCap + ' ' + Constants.POWER_CAP_TEXT.unit;
1305 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001306 },
1307 setHostname: function(hostname) {
1308 return $http({
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001309 method: 'PUT',
1310 url: DataService.getHost() +
1311 '/xyz/openbmc_project/network/config/attr/HostName',
1312 headers: {
1313 'Accept': 'application/json',
1314 'Content-Type': 'application/json'
1315 },
1316 withCredentials: true,
1317 data: JSON.stringify({'data': hostname})
1318 })
1319 .then(function(response) {
1320 return response.data;
1321 });
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001322 },
1323 };
1324 return SERVICE;
Andrew Geisslerd27bb132018-05-24 11:07:27 -07001325 }
1326 ]);
Iftekharul Islamd2269e22017-05-02 09:32:45 -05001327
Andrew Geisslerba5e3f32018-05-24 10:58:00 -07001328})(window.angular);