blob: 46caf909f794cf61ccbaa3f7558d2cc60313384e [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 Islamec6bcd12017-09-06 10:49:07 -0500372 var health = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500373 var relatedItems = [];
374
375 for(var key in content.data){
376 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
377 var severityFlags = {low: false, medium: false, high: false};
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500378 var healthFlags = {critical: false, warning: false, good: false};
Iftekharul Islamcd789502017-04-19 14:37:55 -0500379 severityCode = content.data[key].Severity.split(".").pop();
380 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
381 severityFlags[priority.toLowerCase()] = true;
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500382 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
383 healthFlags[health.toLowerCase()] = true;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500384 relatedItems = [];
385 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500386 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500387 });
388
389 data.push(Object.assign({
390 path: key,
391 copied: false,
392 priority: priority,
393 severity_code: severityCode,
394 severity_flags: severityFlags,
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500395 health_flags: healthFlags,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500396 additional_data: content.data[key].AdditionalData.join("\n"),
397 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500398 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500399 meta: false,
400 confirm: false,
401 related_items: relatedItems,
402 data: {key: key, value: content.data[key]}
403 }, content.data[key]));
404 }
405 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500406 deferred.resolve({data: data, original: dataClone});
Iftekharul Islamcd789502017-04-19 14:37:55 -0500407 }).error(function(error){
408 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500409 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500410 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500411
412 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500413 },
414 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500415 $http({
416 method: 'GET',
Iftekharul Islam8947e702017-07-27 10:28:07 -0500417 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500418 headers: {
419 'Accept': 'application/json',
420 'Content-Type': 'application/json'
421 },
422 withCredentials: true
423 }).success(function(response){
424 var json = JSON.stringify(response);
425 var content = JSON.parse(json);
426 var dataClone = JSON.parse(JSON.stringify(content.data));
427 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500428 var severity = {};
429 var title = "";
430 var tempKeyParts = [];
431 var order = 0;
Iftekharul Islam8a122842017-09-11 10:58:16 -0500432 var customOrder = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500433
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500434 function getScaledValue(value, scale){
435 scale = scale + "";
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500436 scale = parseInt(scale, 10);
437 var power = Math.abs(parseInt(scale,10));
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500438
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500439 if(scale > 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500440 value = value * Math.pow(10, power);
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500441 }else if(scale < 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500442 value = value / Math.pow(10, power);
443 }
444 return value;
445 }
446
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500447 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500448 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
449
450 if(reading.hasOwnProperty('CriticalLow') &&
451 reading.Value < reading.CriticalLow
452 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500453 severityFlags.critical = true;
454 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500455 order = 2;
456 }else if(reading.hasOwnProperty('CriticalHigh') &&
457 reading.Value > reading.CriticalHigh
458 ){
459 severityFlags.critical = true;
460 severityText = 'critical';
461 order = 2;
462 }else if(reading.hasOwnProperty('CriticalLow') &&
463 reading.hasOwnProperty('WarningLow') &&
464 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500465 severityFlags.warning = true;
466 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500467 order = 1;
468 }else if(reading.hasOwnProperty('WarningHigh') &&
469 reading.hasOwnProperty('CriticalHigh') &&
470 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
471 severityFlags.warning = true;
472 severityText = 'warning';
473 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500474 }else{
475 severityFlags.normal = true;
476 severityText = 'normal';
477 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500478 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500479 }
480
481 for(var key in content.data){
482 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500483
484 severity = getSensorStatus(content.data[key]);
485
486 if(!content.data[key].hasOwnProperty('CriticalLow')){
487 content.data[key].CriticalLow = "--";
488 content.data[key].CriticalHigh = "--";
489 }
490
491 if(!content.data[key].hasOwnProperty('WarningLow')){
492 content.data[key].WarningLow = "--";
493 content.data[key].WarningHigh = "--";
494 }
495
496 tempKeyParts = key.split("/");
497 title = tempKeyParts.pop();
498 title = tempKeyParts.pop() + '_' + title;
499 title = title.split("_").map(function(item){
500 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
501 }).reduce(function(prev, el){
502 return prev + " " + el;
503 });
504
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500505 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
506
Iftekharul Islam8a122842017-09-11 10:58:16 -0500507 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
508 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
509 }else{
510 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
511 }
512
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500513 sensorData.push(Object.assign({
514 path: key,
515 selected: false,
516 confirm: false,
517 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500518 title: title,
519 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
520 severity_flags: severity.flags,
521 status: severity.severityText,
522 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500523 custom_order: customOrder,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500524 search_text: (title + " " + content.data[key].Value + " " +
525 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
526 severity.severityText + " " +
527 content.data[key].CriticalLow + " " +
528 content.data[key].CriticalHigh + " " +
529 content.data[key].WarningLow + " " +
530 content.data[key].WarningHigh + " "
531 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500532 original_data: {key: key, value: content.data[key]}
533 }, content.data[key]));
534 }
535 }
536
Iftekharul Islam8947e702017-07-27 10:28:07 -0500537 callback(sensorData, dataClone);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500538 }).error(function(error){
539 console.log(error);
540 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500541 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500542 getFirmwares: function(){
543 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500544 $http({
545 method: 'GET',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500546 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/software/enumerate",
547 headers: {
548 'Accept': 'application/json',
549 'Content-Type': 'application/json'
550 },
551 withCredentials: true
552 }).success(function(response){
553 var json = JSON.stringify(response);
554 var content = JSON.parse(json);
555 var data = [];
556 var active = false;
557 var isExtended = false;
558 var bmcActiveVersion = "";
559 var hostActiveVersion = "";
560 var imageType = "";
561 var extendedVersions = [];
562
563 function getFormatedExtendedVersions(extendedVersion){
564 var versions = [];
565 extendedVersion = extendedVersion.split(",");
566
567 extendedVersion.forEach(function(item){
568 var parts = item.split("-");
569 var numberIndex = 0;
570 for(var i = 0; i < parts.length; i++){
571 if(/[0-9]/.test(parts[i])){
572 numberIndex = i;
573 break;
574 }
575 }
576 var titlePart = parts.splice(0, numberIndex);
577 titlePart = titlePart.join("");
578 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
579 var versionPart = parts.join("-");
580 versions.push({
581 title: titlePart,
582 version: versionPart
583 });
584 });
585
586 return versions;
587 }
588
589 for(var key in content.data){
590 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
591 active = (/\.Active$/).test(content.data[key].Activation);
592 imageType = content.data[key].Purpose.split(".").pop();
593 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
594 if(isExtended){
595 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
596 }
597 data.push(Object.assign({
598 path: key,
599 active: active,
600 imageId: key.split("/").pop(),
601 imageType: imageType,
602 isExtended: isExtended,
603 extended: {
604 show: false,
605 versions: extendedVersions
606 },
607 data: {key: key, value: content.data[key]}
608 }, content.data[key]));
609
610 if(active && imageType == 'BMC'){
611 bmcActiveVersion = content.data[key].Version;
612 }
613
614 if(active && imageType == 'Host'){
615 hostActiveVersion = content.data[key].Version;
616 }
617 }
618 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500619
620 deferred.resolve({
621 data: data,
622 bmcActiveVersion: bmcActiveVersion,
623 hostActiveVersion: hostActiveVersion
624 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500625 }).error(function(error){
626 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500627 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500628 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500629
630 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500631 },
632 uploadImage: function(file, callback){
633 $http({
634 method: 'PUT',
635 timeout: 5 * 60 * 1000,
636 //url: 'http://localhost:3002/upload',
637 url: SERVICE.API_CREDENTIALS.host + "/upload/image/",
638 headers: {
639 'Accept': 'application/octet-stream',
640 'Content-Type': 'application/octet-stream'
641 },
642 withCredentials: true,
643 data: file
644 }).success(function(response){
645 var json = JSON.stringify(response);
646 var content = JSON.parse(json);
647 if(callback){
648 return callback(content);
649 }
650 }).error(function(error){
651 if(callback){
652 callback(error);
653 }else{
654 console.log(error);
655 }
656 });
657 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500658 getBMCEthernetInfo: function(){
659 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500660 $http({
661 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500662 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500663 headers: {
664 'Accept': 'application/json',
665 'Content-Type': 'application/json'
666 },
667 withCredentials: true
668 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500669 var json = JSON.stringify(response);
670 var content = JSON.parse(json);
671 deferred.resolve(content.data);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500672 }).error(function(error){
673 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500674 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500675 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500676
677 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500678 },
679 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500680 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500681 $http({
682 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500683 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500684 headers: {
685 'Accept': 'application/json',
686 'Content-Type': 'application/json'
687 },
688 withCredentials: true
689 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500690 var json = JSON.stringify(response);
691 var content = JSON.parse(json);
692 deferred.resolve(content.data);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500693 }).error(function(error){
694 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500695 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500696 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500697 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500698 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500699 getHardwares: function(callback){
700 $http({
701 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500702 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500703 headers: {
704 'Accept': 'application/json',
705 'Content-Type': 'application/json'
706 },
707 withCredentials: true
708 }).success(function(response){
709 var json = JSON.stringify(response);
710 var content = JSON.parse(json);
711 var hardwareData = [];
712 var keyIndexMap = {};
713 var title = "";
714 var data = [];
715 var searchText = "";
716 var componentIndex = -1;
717 var tempParts = [];
718
719
720 function isSubComponent(key){
721
722 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
723 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
724 }
725
726 return false;
727 }
728
729 function titlelize(title){
730 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
731 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
732 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
733 return title.toUpperCase();
734 }
735 }
736
737 return title;
738 }
739
740 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500741 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500742 for(var key in obj){
743 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
744 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500745 value = obj[key];
746 if(value == 1 || value == 0){
747 value = (value == 1) ? 'Yes' : 'No';
748 }
749 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500750 }
751 }
752
753 return transformed;
754 }
755
756 function getSearchText(data){
757 var searchText = "";
758 for(var i = 0; i < data.length; i++){
759 searchText += " " + data[i].key + " " + data[i].value;
760 }
761
762 return searchText;
763 }
764
765 for(var key in content.data){
766 if(content.data.hasOwnProperty(key) &&
767 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
768
769 data = camelcaseToLabel(content.data[key]);
770 searchText = getSearchText(data);
771 title = key.split("/").pop();
772
773 title = titlelize(title);
774
775 if(!isSubComponent(key)){
776 hardwareData.push(Object.assign({
777 path: key,
778 title: title,
779 selected: false,
780 expanded: false,
781 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
782 sub_components: [],
783 original_data: {key: key, value: content.data[key]}
784 }, {items: data}));
785
786 keyIndexMap[key] = hardwareData.length - 1;
787 }else{
788 var tempParts = key.split("/");
789 tempParts.pop();
790 tempParts = tempParts.join("/");
791 componentIndex = keyIndexMap[tempParts];
792 data = content.data[key];
793 data.title = title;
794 hardwareData[componentIndex].sub_components.push(data);
795 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
796 }
797 }
798 }
799
800 if(callback){
801 callback(hardwareData, content.data);
802 }else{
803 return { data: hardwareData, original_data: content.data};
804 }
805 });
806 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500807 deleteLogs: function(logs) {
808 var defer = $q.defer();
809 var promises = [];
810
811 function finished(){
812 defer.resolve();
813 }
814
815 logs.forEach(function(item){
816 promises.push($http({
817 method: 'POST',
818 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
819 headers: {
820 'Accept': 'application/json',
821 'Content-Type': 'application/json'
822 },
823 withCredentials: true,
824 data: JSON.stringify({"data": []})
825 }));
826 });
827
828 $q.all(promises).then(finished);
829
830 return defer.promise;
831 },
832 resolveLogs: function(logs) {
833 var defer = $q.defer();
834 var promises = [];
835
836 function finished(){
837 defer.resolve();
838 }
839
840 logs.forEach(function(item){
841 promises.push($http({
842 method: 'PUT',
843 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
844 headers: {
845 'Accept': 'application/json',
846 'Content-Type': 'application/json'
847 },
848 withCredentials: true,
849 data: JSON.stringify({"data": "1"})
850 }));
851 });
852
853 $q.all(promises).then(finished);
854
855 return defer.promise;
856 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500857 };
858 return SERVICE;
859 }]);
860
861 })(window.angular);