blob: 67a06413bda8503759e27bd79a1c5b094d0a0112 [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 Islamd2269e22017-05-02 09:32:45 -0500432
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500433 function getScaledValue(value, scale){
434 scale = scale + "";
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500435 scale = parseInt(scale, 10);
436 var power = Math.abs(parseInt(scale,10));
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500437
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500438 if(scale > 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500439 value = value * Math.pow(10, power);
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500440 }else if(scale < 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500441 value = value / Math.pow(10, power);
442 }
443 return value;
444 }
445
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500446 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500447 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
448
449 if(reading.hasOwnProperty('CriticalLow') &&
450 reading.Value < reading.CriticalLow
451 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500452 severityFlags.critical = true;
453 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500454 order = 2;
455 }else if(reading.hasOwnProperty('CriticalHigh') &&
456 reading.Value > reading.CriticalHigh
457 ){
458 severityFlags.critical = true;
459 severityText = 'critical';
460 order = 2;
461 }else if(reading.hasOwnProperty('CriticalLow') &&
462 reading.hasOwnProperty('WarningLow') &&
463 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500464 severityFlags.warning = true;
465 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500466 order = 1;
467 }else if(reading.hasOwnProperty('WarningHigh') &&
468 reading.hasOwnProperty('CriticalHigh') &&
469 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
470 severityFlags.warning = true;
471 severityText = 'warning';
472 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500473 }else{
474 severityFlags.normal = true;
475 severityText = 'normal';
476 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500477 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500478 }
479
480 for(var key in content.data){
481 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500482
483 severity = getSensorStatus(content.data[key]);
484
485 if(!content.data[key].hasOwnProperty('CriticalLow')){
486 content.data[key].CriticalLow = "--";
487 content.data[key].CriticalHigh = "--";
488 }
489
490 if(!content.data[key].hasOwnProperty('WarningLow')){
491 content.data[key].WarningLow = "--";
492 content.data[key].WarningHigh = "--";
493 }
494
495 tempKeyParts = key.split("/");
496 title = tempKeyParts.pop();
497 title = tempKeyParts.pop() + '_' + title;
498 title = title.split("_").map(function(item){
499 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
500 }).reduce(function(prev, el){
501 return prev + " " + el;
502 });
503
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500504 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
505
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500506 sensorData.push(Object.assign({
507 path: key,
508 selected: false,
509 confirm: false,
510 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500511 title: title,
512 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
513 severity_flags: severity.flags,
514 status: severity.severityText,
515 order: severity.order,
516 search_text: (title + " " + content.data[key].Value + " " +
517 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
518 severity.severityText + " " +
519 content.data[key].CriticalLow + " " +
520 content.data[key].CriticalHigh + " " +
521 content.data[key].WarningLow + " " +
522 content.data[key].WarningHigh + " "
523 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500524 original_data: {key: key, value: content.data[key]}
525 }, content.data[key]));
526 }
527 }
528
Iftekharul Islam8947e702017-07-27 10:28:07 -0500529 callback(sensorData, dataClone);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500530 }).error(function(error){
531 console.log(error);
532 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500533 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500534 getFirmwares: function(){
535 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500536 $http({
537 method: 'GET',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500538 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/software/enumerate",
539 headers: {
540 'Accept': 'application/json',
541 'Content-Type': 'application/json'
542 },
543 withCredentials: true
544 }).success(function(response){
545 var json = JSON.stringify(response);
546 var content = JSON.parse(json);
547 var data = [];
548 var active = false;
549 var isExtended = false;
550 var bmcActiveVersion = "";
551 var hostActiveVersion = "";
552 var imageType = "";
553 var extendedVersions = [];
554
555 function getFormatedExtendedVersions(extendedVersion){
556 var versions = [];
557 extendedVersion = extendedVersion.split(",");
558
559 extendedVersion.forEach(function(item){
560 var parts = item.split("-");
561 var numberIndex = 0;
562 for(var i = 0; i < parts.length; i++){
563 if(/[0-9]/.test(parts[i])){
564 numberIndex = i;
565 break;
566 }
567 }
568 var titlePart = parts.splice(0, numberIndex);
569 titlePart = titlePart.join("");
570 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
571 var versionPart = parts.join("-");
572 versions.push({
573 title: titlePart,
574 version: versionPart
575 });
576 });
577
578 return versions;
579 }
580
581 for(var key in content.data){
582 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
583 active = (/\.Active$/).test(content.data[key].Activation);
584 imageType = content.data[key].Purpose.split(".").pop();
585 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
586 if(isExtended){
587 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
588 }
589 data.push(Object.assign({
590 path: key,
591 active: active,
592 imageId: key.split("/").pop(),
593 imageType: imageType,
594 isExtended: isExtended,
595 extended: {
596 show: false,
597 versions: extendedVersions
598 },
599 data: {key: key, value: content.data[key]}
600 }, content.data[key]));
601
602 if(active && imageType == 'BMC'){
603 bmcActiveVersion = content.data[key].Version;
604 }
605
606 if(active && imageType == 'Host'){
607 hostActiveVersion = content.data[key].Version;
608 }
609 }
610 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500611
612 deferred.resolve({
613 data: data,
614 bmcActiveVersion: bmcActiveVersion,
615 hostActiveVersion: hostActiveVersion
616 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500617 }).error(function(error){
618 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500619 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500620 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500621
622 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500623 },
624 uploadImage: function(file, callback){
625 $http({
626 method: 'PUT',
627 timeout: 5 * 60 * 1000,
628 //url: 'http://localhost:3002/upload',
629 url: SERVICE.API_CREDENTIALS.host + "/upload/image/",
630 headers: {
631 'Accept': 'application/octet-stream',
632 'Content-Type': 'application/octet-stream'
633 },
634 withCredentials: true,
635 data: file
636 }).success(function(response){
637 var json = JSON.stringify(response);
638 var content = JSON.parse(json);
639 if(callback){
640 return callback(content);
641 }
642 }).error(function(error){
643 if(callback){
644 callback(error);
645 }else{
646 console.log(error);
647 }
648 });
649 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500650 getBMCEthernetInfo: function(){
651 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500652 $http({
653 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500654 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500655 headers: {
656 'Accept': 'application/json',
657 'Content-Type': 'application/json'
658 },
659 withCredentials: true
660 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500661 var json = JSON.stringify(response);
662 var content = JSON.parse(json);
663 deferred.resolve(content.data);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500664 }).error(function(error){
665 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500666 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500667 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500668
669 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500670 },
671 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500672 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500673 $http({
674 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500675 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500676 headers: {
677 'Accept': 'application/json',
678 'Content-Type': 'application/json'
679 },
680 withCredentials: true
681 }).success(function(response){
Michael Davisdf3bd122017-08-10 11:03:42 -0500682 var json = JSON.stringify(response);
683 var content = JSON.parse(json);
684 deferred.resolve(content.data);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500685 }).error(function(error){
686 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500687 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500688 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500689 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500690 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500691 getHardwares: function(callback){
692 $http({
693 method: 'GET',
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500694 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500695 headers: {
696 'Accept': 'application/json',
697 'Content-Type': 'application/json'
698 },
699 withCredentials: true
700 }).success(function(response){
701 var json = JSON.stringify(response);
702 var content = JSON.parse(json);
703 var hardwareData = [];
704 var keyIndexMap = {};
705 var title = "";
706 var data = [];
707 var searchText = "";
708 var componentIndex = -1;
709 var tempParts = [];
710
711
712 function isSubComponent(key){
713
714 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
715 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
716 }
717
718 return false;
719 }
720
721 function titlelize(title){
722 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
723 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
724 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
725 return title.toUpperCase();
726 }
727 }
728
729 return title;
730 }
731
732 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500733 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500734 for(var key in obj){
735 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
736 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500737 value = obj[key];
738 if(value == 1 || value == 0){
739 value = (value == 1) ? 'Yes' : 'No';
740 }
741 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500742 }
743 }
744
745 return transformed;
746 }
747
748 function getSearchText(data){
749 var searchText = "";
750 for(var i = 0; i < data.length; i++){
751 searchText += " " + data[i].key + " " + data[i].value;
752 }
753
754 return searchText;
755 }
756
757 for(var key in content.data){
758 if(content.data.hasOwnProperty(key) &&
759 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
760
761 data = camelcaseToLabel(content.data[key]);
762 searchText = getSearchText(data);
763 title = key.split("/").pop();
764
765 title = titlelize(title);
766
767 if(!isSubComponent(key)){
768 hardwareData.push(Object.assign({
769 path: key,
770 title: title,
771 selected: false,
772 expanded: false,
773 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
774 sub_components: [],
775 original_data: {key: key, value: content.data[key]}
776 }, {items: data}));
777
778 keyIndexMap[key] = hardwareData.length - 1;
779 }else{
780 var tempParts = key.split("/");
781 tempParts.pop();
782 tempParts = tempParts.join("/");
783 componentIndex = keyIndexMap[tempParts];
784 data = content.data[key];
785 data.title = title;
786 hardwareData[componentIndex].sub_components.push(data);
787 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
788 }
789 }
790 }
791
792 if(callback){
793 callback(hardwareData, content.data);
794 }else{
795 return { data: hardwareData, original_data: content.data};
796 }
797 });
798 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500799 deleteLogs: function(logs) {
800 var defer = $q.defer();
801 var promises = [];
802
803 function finished(){
804 defer.resolve();
805 }
806
807 logs.forEach(function(item){
808 promises.push($http({
809 method: 'POST',
810 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
811 headers: {
812 'Accept': 'application/json',
813 'Content-Type': 'application/json'
814 },
815 withCredentials: true,
816 data: JSON.stringify({"data": []})
817 }));
818 });
819
820 $q.all(promises).then(finished);
821
822 return defer.promise;
823 },
824 resolveLogs: function(logs) {
825 var defer = $q.defer();
826 var promises = [];
827
828 function finished(){
829 defer.resolve();
830 }
831
832 logs.forEach(function(item){
833 promises.push($http({
834 method: 'PUT',
835 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
836 headers: {
837 'Accept': 'application/json',
838 'Content-Type': 'application/json'
839 },
840 withCredentials: true,
841 data: JSON.stringify({"data": "1"})
842 }));
843 });
844
845 $q.all(promises).then(finished);
846
847 return defer.promise;
848 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500849 };
850 return SERVICE;
851 }]);
852
853 })(window.angular);