blob: 408e42f670423e4e658a5fc5f431626f05753b0e [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
7 * @version 0.0.1
8 */
9
10window.angular && (function (angular) {
11 'use strict';
12 angular
13 .module('app.common.services')
Iftekharul Islamf2d74642017-07-10 16:42:14 -050014 .factory('APIUtils', ['$http', 'Constants', '$q', function($http, Constants, $q){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050015 var SERVICE = {
16 LOGIN_CREDENTIALS: Constants.LOGIN_CREDENTIALS,
17 API_CREDENTIALS: Constants.API_CREDENTIALS,
18 API_RESPONSE: Constants.API_RESPONSE,
19 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
20 HOST_STATE_TEXT: Constants.HOST_STATE,
21 HOST_STATE: Constants.HOST_STATE,
Iftekharul Islamcd789502017-04-19 14:37:55 -050022 LED_STATE: Constants.LED_STATE,
23 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
Iftekharul Islam99d199f2017-03-24 15:28:25 -050024 getChassisState: function(callback){
25 $http({
26 method: 'GET',
27 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/chassis0",
28 headers: {
29 'Accept': 'application/json',
30 'Content-Type': 'application/json'
31 },
32 withCredentials: true
33 }).success(function(response){
34 var json = JSON.stringify(response);
35 var content = JSON.parse(json);
36 callback(content.data.CurrentPowerState);
37 }).error(function(error){
38 console.log(error);
39 });
40 },
41 getHostState: function(callback){
42 $http({
43 method: 'GET',
44 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
45 headers: {
46 'Accept': 'application/json',
47 'Content-Type': 'application/json'
48 },
49 withCredentials: true
50 }).success(function(response){
51 var json = JSON.stringify(response);
52 var content = JSON.parse(json);
53 callback(content.data.CurrentHostState);
54 }).error(function(error){
55 console.log(error);
56 });
57 },
Iftekharul Islam171c6a12017-08-11 08:35:47 -050058 getNetworkInfo: function(){
59 var deferred = $q.defer();
60 $http({
61 method: 'GET',
62 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/network/enumerate",
63 headers: {
64 'Accept': 'application/json',
65 'Content-Type': 'application/json'
66 },
67 withCredentials: true
68 }).success(function(response){
69 var json = JSON.stringify(response);
70 var content = JSON.parse(json);
71 var hostname = "";
72 var macAddress = "";
73
74 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/config') &&
75 content.data['/xyz/openbmc_project/network/config'].hasOwnProperty('HostName')
76 ){
77 hostname = content.data['/xyz/openbmc_project/network/config'].HostName;
78 }
79
80 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/eth0') &&
81 content.data['/xyz/openbmc_project/network/eth0'].hasOwnProperty('MACAddress')
82 ){
83 macAddress = content.data['/xyz/openbmc_project/network/eth0'].MACAddress;
84 }
85
86 deferred.resolve({
87 data: content.data,
88 hostname: hostname,
89 mac_address: macAddress,
90 });
91 }).error(function(error){
92 console.log(error);
93 deferred.reject(error);
94 });
95 return deferred.promise;
96 },
Michael Davisdf3bd122017-08-10 11:03:42 -050097 getLEDState: function(){
98 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -050099 $http({
100 method: 'GET',
101 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/led/groups/enclosure_identify",
102 headers: {
103 'Accept': 'application/json',
104 'Content-Type': 'application/json'
105 },
106 withCredentials: true
107 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500108 var json = JSON.stringify(response);
109 var content = JSON.parse(json);
110 deferred.resolve(content.data.Asserted);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500111 }).error(function(error){
112 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500113 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500114 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500115 return deferred.promise;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500116 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500117 login: function(username, password, callback){
118 $http({
119 method: 'POST',
120 url: SERVICE.API_CREDENTIALS.host + "/login",
121 headers: {
122 'Accept': 'application/json',
123 'Content-Type': 'application/json'
124 },
125 withCredentials: true,
126 data: JSON.stringify({"data": [username, password]})
127 }).success(function(response){
128 if(callback){
129 callback(response);
130 }
131 }).error(function(error){
132 if(callback){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500133 if(error && error.status && error.status == 'error'){
134 callback(error);
135 }else{
136 callback(error, true);
137 }
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500138 }
139 console.log(error);
140 });
141 },
142 logout: function(callback){
143 $http({
144 method: 'POST',
145 url: SERVICE.API_CREDENTIALS.host + "/logout",
146 headers: {
147 'Accept': 'application/json',
148 'Content-Type': 'application/json'
149 },
150 withCredentials: true,
151 data: JSON.stringify({"data": []})
152 }).success(function(response){
153 if(callback){
154 callback(response);
155 }
156 }).error(function(error){
157 if(callback){
158 callback(null, error);
159 }
160 console.log(error);
161 });
162 },
163 chassisPowerOn: function(callback){
164 $http({
165 method: 'POST',
166 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
167 headers: {
168 'Accept': 'application/json',
169 'Content-Type': 'application/json'
170 },
171 withCredentials: true,
172 data: JSON.stringify({"data": []})
173 }).success(function(response){
174 var json = JSON.stringify(response);
175 var content = JSON.parse(json);
176 if(callback){
177 return callback(content.data.CurrentPowerState);
178 }
179 }).error(function(error){
180 if(callback){
181 callback(error);
182 }else{
183 console.log(error);
184 }
185 });
186 },
187 chassisPowerOff: function(callback){
188 $http({
189 method: 'POST',
190 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
191 headers: {
192 'Accept': 'application/json',
193 'Content-Type': 'application/json'
194 },
195 withCredentials: true,
196 data: JSON.stringify({"data": []})
197 }).success(function(response){
198 var json = JSON.stringify(response);
199 var content = JSON.parse(json);
200 if(callback){
201 return callback(content.data.CurrentPowerState);
202 }
203 }).error(function(error){
204 if(callback){
205 callback(error);
206 }else{
207 console.log(error);
208 }
209 });
210 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500211 setLEDState: function(state, callback){
212 $http({
213 method: 'PUT',
214 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
215 headers: {
216 'Accept': 'application/json',
217 'Content-Type': 'application/json'
218 },
219 withCredentials: true,
220 data: JSON.stringify({"data": state})
221 }).success(function(response){
222 var json = JSON.stringify(response);
223 var content = JSON.parse(json);
224 if(callback){
225 return callback(content.status);
226 }
227 }).error(function(error){
228 if(callback){
229 callback(error);
230 }else{
231 console.log(error);
232 }
233 });
234 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500235 bmcReboot: function(callback){
236 $http({
237 method: 'PUT',
238 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
239 headers: {
240 'Accept': 'application/json',
241 'Content-Type': 'application/json'
242 },
243 withCredentials: true,
244 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
245 }).success(function(response){
246 var json = JSON.stringify(response);
247 var content = JSON.parse(json);
248 if(callback){
249 return callback(content.status);
250 }
251 }).error(function(error){
252 if(callback){
253 callback(error);
254 }else{
255 console.log(error);
256 }
257 });
258 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500259 hostPowerOn: function(callback){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500260 $http({
261 method: 'PUT',
262 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
263 headers: {
264 'Accept': 'application/json',
265 'Content-Type': 'application/json'
266 },
267 withCredentials: true,
268 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
269 }).success(function(response){
270 var json = JSON.stringify(response);
271 var content = JSON.parse(json);
272 if(callback){
273 return callback(content.status);
274 }
275 }).error(function(error){
276 if(callback){
277 callback(error);
278 }else{
279 console.log(error);
280 }
281 });
282 },
283 hostPowerOff: function(callback){
284 $http({
285 method: 'PUT',
286 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
287 headers: {
288 'Accept': 'application/json',
289 'Content-Type': 'application/json'
290 },
291 withCredentials: true,
292 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
293 }).success(function(response){
294 var json = JSON.stringify(response);
295 var content = JSON.parse(json);
296 if(callback){
297 return callback(content.status);
298 }
299 }).error(function(error){
300 if(callback){
301 callback(error);
302 }else{
303 console.log(error);
304 }
305 });
306 },
307 hostReboot: function(callback){
308 $http({
309 method: 'POST',
310 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
311 headers: {
312 'Accept': 'application/json',
313 'Content-Type': 'application/json'
314 },
315 withCredentials: true,
316 data: JSON.stringify({"data": []}),
317 }).success(function(response){
318 var json = JSON.stringify(response);
319 var content = JSON.parse(json);
320 if(callback){
321 return callback(content);
322 }
323 }).error(function(error){
324 if(callback){
325 callback(error);
326 }else{
327 console.log(error);
328 }
329 });
330 },
331 hostShutdown: function(callback){
332 $http({
333 method: 'POST',
334 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
335 headers: {
336 'Accept': 'application/json',
337 'Content-Type': 'application/json'
338 },
339 withCredentials: true,
340 data: JSON.stringify({"data": []})
341 }).success(function(response){
342 var json = JSON.stringify(response);
343 var content = JSON.parse(json);
344 if(callback){
345 return callback(content);
346 }
347 }).error(function(error){
348 if(callback){
349 callback(error);
350 }else{
351 console.log(error);
352 }
353 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500354 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500355 getLogs: function(){
356 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500357 $http({
358 method: 'GET',
359 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/enumerate",
360 headers: {
361 'Accept': 'application/json',
362 'Content-Type': 'application/json'
363 },
364 withCredentials: true
365 }).success(function(response){
366 var json = JSON.stringify(response);
367 var content = JSON.parse(json);
368 var dataClone = JSON.parse(JSON.stringify(content.data));
369 var data = [];
370 var severityCode = '';
371 var priority = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500372 var relatedItems = [];
373
374 for(var key in content.data){
375 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
376 var severityFlags = {low: false, medium: false, high: false};
377 severityCode = content.data[key].Severity.split(".").pop();
378 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
379 severityFlags[priority.toLowerCase()] = true;
380 relatedItems = [];
381 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500382 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500383 });
384
385 data.push(Object.assign({
386 path: key,
387 copied: false,
388 priority: priority,
389 severity_code: severityCode,
390 severity_flags: severityFlags,
391 additional_data: content.data[key].AdditionalData.join("\n"),
392 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500393 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500394 meta: false,
395 confirm: false,
396 related_items: relatedItems,
397 data: {key: key, value: content.data[key]}
398 }, content.data[key]));
399 }
400 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500401 deferred.resolve({data: data, original: dataClone});
Iftekharul Islamcd789502017-04-19 14:37:55 -0500402 }).error(function(error){
403 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500404 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500405 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500406
407 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500408 },
409 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500410 $http({
411 method: 'GET',
Iftekharul Islam8947e702017-07-27 10:28:07 -0500412 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500413 headers: {
414 'Accept': 'application/json',
415 'Content-Type': 'application/json'
416 },
417 withCredentials: true
418 }).success(function(response){
419 var json = JSON.stringify(response);
420 var content = JSON.parse(json);
421 var dataClone = JSON.parse(JSON.stringify(content.data));
422 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500423 var severity = {};
424 var title = "";
425 var tempKeyParts = [];
426 var order = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500427
428 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500429 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
430
431 if(reading.hasOwnProperty('CriticalLow') &&
432 reading.Value < reading.CriticalLow
433 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500434 severityFlags.critical = true;
435 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500436 order = 2;
437 }else if(reading.hasOwnProperty('CriticalHigh') &&
438 reading.Value > reading.CriticalHigh
439 ){
440 severityFlags.critical = true;
441 severityText = 'critical';
442 order = 2;
443 }else if(reading.hasOwnProperty('CriticalLow') &&
444 reading.hasOwnProperty('WarningLow') &&
445 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500446 severityFlags.warning = true;
447 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500448 order = 1;
449 }else if(reading.hasOwnProperty('WarningHigh') &&
450 reading.hasOwnProperty('CriticalHigh') &&
451 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
452 severityFlags.warning = true;
453 severityText = 'warning';
454 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500455 }else{
456 severityFlags.normal = true;
457 severityText = 'normal';
458 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500459 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500460 }
461
462 for(var key in content.data){
463 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500464
465 severity = getSensorStatus(content.data[key]);
466
467 if(!content.data[key].hasOwnProperty('CriticalLow')){
468 content.data[key].CriticalLow = "--";
469 content.data[key].CriticalHigh = "--";
470 }
471
472 if(!content.data[key].hasOwnProperty('WarningLow')){
473 content.data[key].WarningLow = "--";
474 content.data[key].WarningHigh = "--";
475 }
476
477 tempKeyParts = key.split("/");
478 title = tempKeyParts.pop();
479 title = tempKeyParts.pop() + '_' + title;
480 title = title.split("_").map(function(item){
481 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
482 }).reduce(function(prev, el){
483 return prev + " " + el;
484 });
485
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500486 sensorData.push(Object.assign({
487 path: key,
488 selected: false,
489 confirm: false,
490 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500491 title: title,
492 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
493 severity_flags: severity.flags,
494 status: severity.severityText,
495 order: severity.order,
496 search_text: (title + " " + content.data[key].Value + " " +
497 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
498 severity.severityText + " " +
499 content.data[key].CriticalLow + " " +
500 content.data[key].CriticalHigh + " " +
501 content.data[key].WarningLow + " " +
502 content.data[key].WarningHigh + " "
503 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500504 original_data: {key: key, value: content.data[key]}
505 }, content.data[key]));
506 }
507 }
508
Iftekharul Islam8947e702017-07-27 10:28:07 -0500509 callback(sensorData, dataClone);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500510 }).error(function(error){
511 console.log(error);
512 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500513 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500514 getFirmwares: function(){
515 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500516 $http({
517 method: 'GET',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500518 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/software/enumerate",
519 headers: {
520 'Accept': 'application/json',
521 'Content-Type': 'application/json'
522 },
523 withCredentials: true
524 }).success(function(response){
525 var json = JSON.stringify(response);
526 var content = JSON.parse(json);
527 var data = [];
528 var active = false;
529 var isExtended = false;
530 var bmcActiveVersion = "";
531 var hostActiveVersion = "";
532 var imageType = "";
533 var extendedVersions = [];
534
535 function getFormatedExtendedVersions(extendedVersion){
536 var versions = [];
537 extendedVersion = extendedVersion.split(",");
538
539 extendedVersion.forEach(function(item){
540 var parts = item.split("-");
541 var numberIndex = 0;
542 for(var i = 0; i < parts.length; i++){
543 if(/[0-9]/.test(parts[i])){
544 numberIndex = i;
545 break;
546 }
547 }
548 var titlePart = parts.splice(0, numberIndex);
549 titlePart = titlePart.join("");
550 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
551 var versionPart = parts.join("-");
552 versions.push({
553 title: titlePart,
554 version: versionPart
555 });
556 });
557
558 return versions;
559 }
560
561 for(var key in content.data){
562 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
563 active = (/\.Active$/).test(content.data[key].Activation);
564 imageType = content.data[key].Purpose.split(".").pop();
565 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
566 if(isExtended){
567 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
568 }
569 data.push(Object.assign({
570 path: key,
571 active: active,
572 imageId: key.split("/").pop(),
573 imageType: imageType,
574 isExtended: isExtended,
575 extended: {
576 show: false,
577 versions: extendedVersions
578 },
579 data: {key: key, value: content.data[key]}
580 }, content.data[key]));
581
582 if(active && imageType == 'BMC'){
583 bmcActiveVersion = content.data[key].Version;
584 }
585
586 if(active && imageType == 'Host'){
587 hostActiveVersion = content.data[key].Version;
588 }
589 }
590 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500591
592 deferred.resolve({
593 data: data,
594 bmcActiveVersion: bmcActiveVersion,
595 hostActiveVersion: hostActiveVersion
596 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500597 }).error(function(error){
598 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500599 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500600 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500601
602 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500603 },
604 uploadImage: function(file, callback){
605 $http({
606 method: 'PUT',
607 timeout: 5 * 60 * 1000,
608 //url: 'http://localhost:3002/upload',
609 url: SERVICE.API_CREDENTIALS.host + "/upload/image/",
610 headers: {
611 'Accept': 'application/octet-stream',
612 'Content-Type': 'application/octet-stream'
613 },
614 withCredentials: true,
615 data: file
616 }).success(function(response){
617 var json = JSON.stringify(response);
618 var content = JSON.parse(json);
619 if(callback){
620 return callback(content);
621 }
622 }).error(function(error){
623 if(callback){
624 callback(error);
625 }else{
626 console.log(error);
627 }
628 });
629 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500630 getBMCEthernetInfo: function(){
631 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500632 $http({
633 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500634 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500635 headers: {
636 'Accept': 'application/json',
637 'Content-Type': 'application/json'
638 },
639 withCredentials: true
640 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500641 var json = JSON.stringify(response);
642 var content = JSON.parse(json);
643 deferred.resolve(content.data);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500644 }).error(function(error){
645 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500646 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500647 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500648
649 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500650 },
651 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500652 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500653 $http({
654 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500655 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500656 headers: {
657 'Accept': 'application/json',
658 'Content-Type': 'application/json'
659 },
660 withCredentials: true
661 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500662 var json = JSON.stringify(response);
663 var content = JSON.parse(json);
664 deferred.resolve(content.data);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500665 }).error(function(error){
666 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500667 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500668 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500669 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500670 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500671 getHardwares: function(callback){
672 $http({
673 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500674 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500675 headers: {
676 'Accept': 'application/json',
677 'Content-Type': 'application/json'
678 },
679 withCredentials: true
680 }).success(function(response){
681 var json = JSON.stringify(response);
682 var content = JSON.parse(json);
683 var hardwareData = [];
684 var keyIndexMap = {};
685 var title = "";
686 var data = [];
687 var searchText = "";
688 var componentIndex = -1;
689 var tempParts = [];
690
691
692 function isSubComponent(key){
693
694 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
695 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
696 }
697
698 return false;
699 }
700
701 function titlelize(title){
702 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
703 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
704 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
705 return title.toUpperCase();
706 }
707 }
708
709 return title;
710 }
711
712 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500713 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500714 for(var key in obj){
715 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
716 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500717 value = obj[key];
718 if(value == 1 || value == 0){
719 value = (value == 1) ? 'Yes' : 'No';
720 }
721 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500722 }
723 }
724
725 return transformed;
726 }
727
728 function getSearchText(data){
729 var searchText = "";
730 for(var i = 0; i < data.length; i++){
731 searchText += " " + data[i].key + " " + data[i].value;
732 }
733
734 return searchText;
735 }
736
737 for(var key in content.data){
738 if(content.data.hasOwnProperty(key) &&
739 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
740
741 data = camelcaseToLabel(content.data[key]);
742 searchText = getSearchText(data);
743 title = key.split("/").pop();
744
745 title = titlelize(title);
746
747 if(!isSubComponent(key)){
748 hardwareData.push(Object.assign({
749 path: key,
750 title: title,
751 selected: false,
752 expanded: false,
753 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
754 sub_components: [],
755 original_data: {key: key, value: content.data[key]}
756 }, {items: data}));
757
758 keyIndexMap[key] = hardwareData.length - 1;
759 }else{
760 var tempParts = key.split("/");
761 tempParts.pop();
762 tempParts = tempParts.join("/");
763 componentIndex = keyIndexMap[tempParts];
764 data = content.data[key];
765 data.title = title;
766 hardwareData[componentIndex].sub_components.push(data);
767 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
768 }
769 }
770 }
771
772 if(callback){
773 callback(hardwareData, content.data);
774 }else{
775 return { data: hardwareData, original_data: content.data};
776 }
777 });
778 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500779 deleteLogs: function(logs) {
780 var defer = $q.defer();
781 var promises = [];
782
783 function finished(){
784 defer.resolve();
785 }
786
787 logs.forEach(function(item){
788 promises.push($http({
789 method: 'POST',
790 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
791 headers: {
792 'Accept': 'application/json',
793 'Content-Type': 'application/json'
794 },
795 withCredentials: true,
796 data: JSON.stringify({"data": []})
797 }));
798 });
799
800 $q.all(promises).then(finished);
801
802 return defer.promise;
803 },
804 resolveLogs: function(logs) {
805 var defer = $q.defer();
806 var promises = [];
807
808 function finished(){
809 defer.resolve();
810 }
811
812 logs.forEach(function(item){
813 promises.push($http({
814 method: 'PUT',
815 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
816 headers: {
817 'Accept': 'application/json',
818 'Content-Type': 'application/json'
819 },
820 withCredentials: true,
821 data: JSON.stringify({"data": "1"})
822 }));
823 });
824
825 $q.all(promises).then(finished);
826
827 return defer.promise;
828 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500829 };
830 return SERVICE;
831 }]);
832
833 })(window.angular);