blob: 73fe5a4a82a29480331aa9d222641aa157f19a53 [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 Islam1acb4122017-11-02 13:20:32 -050014 .factory('APIUtils', ['$http', 'Constants', '$q', 'dataService',function($http, Constants, $q, DataService){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050015 var SERVICE = {
Iftekharul Islam99d199f2017-03-24 15:28:25 -050016 API_CREDENTIALS: Constants.API_CREDENTIALS,
17 API_RESPONSE: Constants.API_RESPONSE,
18 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
19 HOST_STATE_TEXT: Constants.HOST_STATE,
20 HOST_STATE: Constants.HOST_STATE,
Iftekharul Islamcd789502017-04-19 14:37:55 -050021 LED_STATE: Constants.LED_STATE,
22 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
Iftekharul Islam1acb4122017-11-02 13:20:32 -050023 HOST_SESSION_STORAGE_KEY: Constants.API_CREDENTIALS.host_storage_key,
Iftekharul Islam99d199f2017-03-24 15:28:25 -050024 getChassisState: function(callback){
25 $http({
26 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050027 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050028 headers: {
29 'Accept': 'application/json',
30 'Content-Type': 'application/json'
31 },
32 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070033 }).then(function(response){
34 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050035 var content = JSON.parse(json);
36 callback(content.data.CurrentPowerState);
Ed Tanousbbcf6702017-10-06 13:53:06 -070037 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050038 console.log(error);
39 });
40 },
41 getHostState: function(callback){
42 $http({
43 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050044 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050045 headers: {
46 'Accept': 'application/json',
47 'Content-Type': 'application/json'
48 },
49 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070050 }).then(function(response){
51 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050052 var content = JSON.parse(json);
53 callback(content.data.CurrentHostState);
Ed Tanousbbcf6702017-10-06 13:53:06 -070054 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050055 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',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050062 url: DataService.getHost() + "/xyz/openbmc_project/network/enumerate",
Iftekharul Islam171c6a12017-08-11 08:35:47 -050063 headers: {
64 'Accept': 'application/json',
65 'Content-Type': 'application/json'
66 },
67 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070068 }).then(function(response){
69 var json = JSON.stringify(response.data);
Iftekharul Islam171c6a12017-08-11 08:35:47 -050070 var content = JSON.parse(json);
71 var hostname = "";
72 var macAddress = "";
73
Iftekharul Islam2a489552017-11-02 13:23:08 -050074 function parseNetworkData(content){
75 var data = {
76 interface_ids: [],
77 interfaces: {
78 }
79 };
80 var interfaceId = '', keyParts = [], interfaceHash = '', interfaceType = '';
81 for(var key in content.data){
82 if(key.match(/network\/eth\d+$/ig)){
83 interfaceId = key.split("/").pop();
84 if(data.interface_ids.indexOf(interfaceId) == -1){
85 data.interface_ids.push(interfaceId);
86 data.interfaces[interfaceId] = {
87 interfaceIname: '',
88 domainName:'',
89 MACAddress:'',
90 Nameservers: [],
91 DHCPEnabled: 0,
92 ipv4:
93 {
94 ids: [],
95 values: []
96 },
97 ipv6:
98 {
99 ids: [],
100 values: []
101 }
102 };
103 data.interfaces[interfaceId].MACAddress = content.data[key].MACAddress;
104 data.interfaces[interfaceId].DomainName = content.data[key].DomainName.join(" ");
105 data.interfaces[interfaceId].Nameservers = content.data[key].Nameservers;
106 data.interfaces[interfaceId].DHCPEnabled = content.data[key].DHCPEnabled;
107 }
108 }else if(key.match(/network\/eth\d+\/ipv[4|6]\/[a-z0-9]+$/ig)){
109 keyParts = key.split("/");
110 interfaceHash = keyParts.pop();
111 interfaceType = keyParts.pop();
112 interfaceId = keyParts.pop();
113
114 if(data.interfaces[interfaceId][interfaceType].ids.indexOf(interfaceHash) == -1){
115 data.interfaces[interfaceId][interfaceType].ids.push(interfaceHash);
116 data.interfaces[interfaceId][interfaceType].values.push(content.data[key]);
117 }
118 }
119 }
120 return data;
121 }
122
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500123 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/config') &&
124 content.data['/xyz/openbmc_project/network/config'].hasOwnProperty('HostName')
125 ){
126 hostname = content.data['/xyz/openbmc_project/network/config'].HostName;
127 }
128
129 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/eth0') &&
130 content.data['/xyz/openbmc_project/network/eth0'].hasOwnProperty('MACAddress')
131 ){
132 macAddress = content.data['/xyz/openbmc_project/network/eth0'].MACAddress;
133 }
134
135 deferred.resolve({
136 data: content.data,
137 hostname: hostname,
138 mac_address: macAddress,
Iftekharul Islam2a489552017-11-02 13:23:08 -0500139 formatted_data: parseNetworkData(content)
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500140 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700141 }, function(error){
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500142 console.log(error);
143 deferred.reject(error);
144 });
145 return deferred.promise;
146 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500147 getLEDState: function(){
148 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500149 $http({
150 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500151 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500152 headers: {
153 'Accept': 'application/json',
154 'Content-Type': 'application/json'
155 },
156 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700157 }).then(function(response){
158 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500159 var content = JSON.parse(json);
160 deferred.resolve(content.data.Asserted);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700161 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500162 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500163 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500164 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500165 return deferred.promise;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500166 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500167 login: function(username, password, callback){
168 $http({
169 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500170 url: DataService.getHost() + "/login",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500171 headers: {
172 'Accept': 'application/json',
173 'Content-Type': 'application/json'
174 },
175 withCredentials: true,
176 data: JSON.stringify({"data": [username, password]})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700177 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500178 if(callback){
Ed Tanousbbcf6702017-10-06 13:53:06 -0700179 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500180 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700181 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500182 if(callback){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500183 if(error && error.status && error.status == 'error'){
184 callback(error);
185 }else{
186 callback(error, true);
187 }
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500188 }
189 console.log(error);
190 });
191 },
192 logout: function(callback){
193 $http({
194 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500195 url: DataService.getHost() + "/logout",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500196 headers: {
197 'Accept': 'application/json',
198 'Content-Type': 'application/json'
199 },
200 withCredentials: true,
201 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700202 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500203 if(callback){
Iftekharul Islamde883402018-02-05 11:16:21 -0600204 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500205 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700206 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500207 if(callback){
208 callback(null, error);
209 }
210 console.log(error);
211 });
212 },
Gunnar Mills55a8e392018-03-14 15:37:44 -0500213 changePassword: function(user, newPassword){
214 var deferred = $q.defer();
215 $http({
216 method: 'POST',
217 url: DataService.getHost() + "/xyz/openbmc_project/user/" + user + "/action/SetPassword",
218 headers: {
219 'Accept': 'application/json',
220 'Content-Type': 'application/json'
221 },
222 withCredentials: true,
223 data: JSON.stringify({"data": [newPassword]}),
224 responseType: 'arraybuffer'
225 }).then(function(response, status, headers){
226 deferred.resolve({
227 data: response,
228 status: status,
229 headers: headers
230 });
231 }, function(error){
232 console.log(error);
233 deferred.reject(error);
234 });
235 return deferred.promise;
236 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500237 chassisPowerOn: function(callback){
238 $http({
239 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500240 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500241 headers: {
242 'Accept': 'application/json',
243 'Content-Type': 'application/json'
244 },
245 withCredentials: true,
246 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700247 }).then(function(response){
248 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500249 var content = JSON.parse(json);
250 if(callback){
251 return callback(content.data.CurrentPowerState);
252 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700253 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500254 if(callback){
255 callback(error);
256 }else{
257 console.log(error);
258 }
259 });
260 },
261 chassisPowerOff: function(callback){
262 $http({
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600263 method: 'PUT',
264 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500265 headers: {
266 'Accept': 'application/json',
267 'Content-Type': 'application/json'
268 },
269 withCredentials: true,
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600270 data: JSON.stringify({"data": "xyz.openbmc_project.State.Chassis.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700271 }).then(function(response){
272 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500273 var content = JSON.parse(json);
274 if(callback){
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600275 return callback(content.status);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500276 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700277 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500278 if(callback){
279 callback(error);
280 }else{
281 console.log(error);
282 }
283 });
284 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500285 setLEDState: function(state, callback){
286 $http({
287 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500288 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500289 headers: {
290 'Accept': 'application/json',
291 'Content-Type': 'application/json'
292 },
293 withCredentials: true,
294 data: JSON.stringify({"data": state})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700295 }).then(function(response){
296 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500297 var content = JSON.parse(json);
298 if(callback){
299 return callback(content.status);
300 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700301 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500302 if(callback){
303 callback(error);
304 }else{
305 console.log(error);
306 }
307 });
308 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500309 bmcReboot: function(callback){
310 $http({
311 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500312 url: DataService.getHost() + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
Iftekharul Islam55368122017-03-27 09:46:50 -0500313 headers: {
314 'Accept': 'application/json',
315 'Content-Type': 'application/json'
316 },
317 withCredentials: true,
318 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700319 }).then(function(response){
320 var json = JSON.stringify(response.data);
Iftekharul Islam55368122017-03-27 09:46:50 -0500321 var content = JSON.parse(json);
322 if(callback){
323 return callback(content.status);
324 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700325 }, function(error){
Iftekharul Islam55368122017-03-27 09:46:50 -0500326 if(callback){
327 callback(error);
328 }else{
329 console.log(error);
330 }
331 });
332 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500333 hostPowerOn: function(callback){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500334 $http({
335 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500336 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500337 headers: {
338 'Accept': 'application/json',
339 'Content-Type': 'application/json'
340 },
341 withCredentials: true,
342 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700343 }).then(function(response){
344 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500345 var content = JSON.parse(json);
346 if(callback){
347 return callback(content.status);
348 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700349 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500350 if(callback){
351 callback(error);
352 }else{
353 console.log(error);
354 }
355 });
356 },
357 hostPowerOff: function(callback){
358 $http({
359 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500360 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500361 headers: {
362 'Accept': 'application/json',
363 'Content-Type': 'application/json'
364 },
365 withCredentials: true,
366 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700367 }).then(function(response){
368 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500369 var content = JSON.parse(json);
370 if(callback){
371 return callback(content.status);
372 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700373 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500374 if(callback){
375 callback(error);
376 }else{
377 console.log(error);
378 }
379 });
380 },
381 hostReboot: function(callback){
382 $http({
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600383 method: 'PUT',
384 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500385 headers: {
386 'Accept': 'application/json',
387 'Content-Type': 'application/json'
388 },
389 withCredentials: true,
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600390 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700391 }).then(function(response){
392 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500393 var content = JSON.parse(json);
394 if(callback){
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600395 return callback(content.status);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500396 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700397 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500398 if(callback){
399 callback(error);
400 }else{
401 console.log(error);
402 }
403 });
404 },
405 hostShutdown: function(callback){
406 $http({
407 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500408 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500409 headers: {
410 'Accept': 'application/json',
411 'Content-Type': 'application/json'
412 },
413 withCredentials: true,
414 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700415 }).then(function(response){
416 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500417 var content = JSON.parse(json);
418 if(callback){
419 return callback(content);
420 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700421 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500422 if(callback){
423 callback(error);
424 }else{
425 console.log(error);
426 }
427 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500428 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500429 getLogs: function(){
430 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500431 $http({
432 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500433 url: DataService.getHost() + "/xyz/openbmc_project/logging/enumerate",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500434 headers: {
435 'Accept': 'application/json',
436 'Content-Type': 'application/json'
437 },
438 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700439 }).then(function(response){
440 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500441 var content = JSON.parse(json);
442 var dataClone = JSON.parse(JSON.stringify(content.data));
443 var data = [];
444 var severityCode = '';
445 var priority = '';
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500446 var health = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500447 var relatedItems = [];
448
449 for(var key in content.data){
450 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
451 var severityFlags = {low: false, medium: false, high: false};
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500452 var healthFlags = {critical: false, warning: false, good: false};
Iftekharul Islamcd789502017-04-19 14:37:55 -0500453 severityCode = content.data[key].Severity.split(".").pop();
454 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
455 severityFlags[priority.toLowerCase()] = true;
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500456 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
457 healthFlags[health.toLowerCase()] = true;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500458 relatedItems = [];
459 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500460 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500461 });
462
463 data.push(Object.assign({
464 path: key,
465 copied: false,
466 priority: priority,
467 severity_code: severityCode,
468 severity_flags: severityFlags,
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500469 health_flags: healthFlags,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500470 additional_data: content.data[key].AdditionalData.join("\n"),
Gunnar Mills43a2ed12018-02-08 15:42:30 -0600471 type: content.data[key].Message,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500472 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500473 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500474 meta: false,
475 confirm: false,
476 related_items: relatedItems,
477 data: {key: key, value: content.data[key]}
478 }, content.data[key]));
479 }
480 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500481 deferred.resolve({data: data, original: dataClone});
Ed Tanousbbcf6702017-10-06 13:53:06 -0700482 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500483 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500484 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500485 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500486
487 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500488 },
489 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500490 $http({
491 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500492 url: DataService.getHost() + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500493 headers: {
494 'Accept': 'application/json',
495 'Content-Type': 'application/json'
496 },
497 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700498 }).then(function(response){
499 var json = JSON.stringify(response.data);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500500 var content = JSON.parse(json);
501 var dataClone = JSON.parse(JSON.stringify(content.data));
502 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500503 var severity = {};
504 var title = "";
505 var tempKeyParts = [];
506 var order = 0;
Iftekharul Islam8a122842017-09-11 10:58:16 -0500507 var customOrder = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500508
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500509 function getScaledValue(value, scale){
510 scale = scale + "";
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500511 scale = parseInt(scale, 10);
512 var power = Math.abs(parseInt(scale,10));
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500513
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500514 if(scale > 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500515 value = value * Math.pow(10, power);
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500516 }else if(scale < 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500517 value = value / Math.pow(10, power);
518 }
519 return value;
520 }
521
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500522 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500523 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
524
Gunnar Millseedefd32018-02-28 17:02:34 -0600525 if(reading.hasOwnProperty('CriticalLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500526 reading.Value < reading.CriticalLow
527 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500528 severityFlags.critical = true;
529 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500530 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600531 }else if(reading.hasOwnProperty('CriticalHigh') &&
532 reading.Value > reading.CriticalHigh
Iftekharul Islam8947e702017-07-27 10:28:07 -0500533 ){
534 severityFlags.critical = true;
535 severityText = 'critical';
536 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600537 }else if(reading.hasOwnProperty('CriticalLow') &&
538 reading.hasOwnProperty('WarningLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500539 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500540 severityFlags.warning = true;
541 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500542 order = 1;
Gunnar Millseedefd32018-02-28 17:02:34 -0600543 }else if(reading.hasOwnProperty('WarningHigh') &&
544 reading.hasOwnProperty('CriticalHigh') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500545 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
546 severityFlags.warning = true;
547 severityText = 'warning';
548 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500549 }else{
550 severityFlags.normal = true;
551 severityText = 'normal';
552 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500553 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500554 }
555
556 for(var key in content.data){
557 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500558
559 severity = getSensorStatus(content.data[key]);
560
561 if(!content.data[key].hasOwnProperty('CriticalLow')){
562 content.data[key].CriticalLow = "--";
563 content.data[key].CriticalHigh = "--";
564 }
565
566 if(!content.data[key].hasOwnProperty('WarningLow')){
567 content.data[key].WarningLow = "--";
568 content.data[key].WarningHigh = "--";
569 }
570
571 tempKeyParts = key.split("/");
572 title = tempKeyParts.pop();
573 title = tempKeyParts.pop() + '_' + title;
574 title = title.split("_").map(function(item){
575 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
576 }).reduce(function(prev, el){
577 return prev + " " + el;
578 });
579
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500580 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
Gunnar Mills022f5642018-02-07 14:30:17 -0600581 content.data[key].CriticalLow = getScaledValue(content.data[key].CriticalLow, content.data[key].Scale);
582 content.data[key].CriticalHigh = getScaledValue(content.data[key].CriticalHigh, content.data[key].Scale);
583 content.data[key].WarningLow = getScaledValue(content.data[key].WarningLow, content.data[key].Scale);
584 content.data[key].WarningHigh = getScaledValue(content.data[key].WarningHigh, content.data[key].Scale);
Iftekharul Islam8a122842017-09-11 10:58:16 -0500585 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
586 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
587 }else{
588 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
589 }
590
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500591 sensorData.push(Object.assign({
592 path: key,
593 selected: false,
594 confirm: false,
595 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500596 title: title,
597 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
598 severity_flags: severity.flags,
599 status: severity.severityText,
600 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500601 custom_order: customOrder,
Gunnar Millseedefd32018-02-28 17:02:34 -0600602 search_text: (title + " " + content.data[key].Value + " " +
603 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
604 severity.severityText + " " +
Iftekharul Islam8947e702017-07-27 10:28:07 -0500605 content.data[key].CriticalLow + " " +
606 content.data[key].CriticalHigh + " " +
607 content.data[key].WarningLow + " " +
608 content.data[key].WarningHigh + " "
609 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500610 original_data: {key: key, value: content.data[key]}
611 }, content.data[key]));
612 }
613 }
614
Iftekharul Islam8947e702017-07-27 10:28:07 -0500615 callback(sensorData, dataClone);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700616 }, function(error){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500617 console.log(error);
618 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500619 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500620 getFirmwares: function(){
621 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500622 $http({
623 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500624 url: DataService.getHost() + "/xyz/openbmc_project/software/enumerate",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500625 headers: {
626 'Accept': 'application/json',
627 'Content-Type': 'application/json'
628 },
629 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700630 }).then(function(response){
631 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500632 var content = JSON.parse(json);
633 var data = [];
Gunnar Mills902c38c2018-02-23 10:12:39 -0600634 var activationStatus = "";
Iftekharul Islamc0161392017-06-14 15:46:15 -0500635 var isExtended = false;
636 var bmcActiveVersion = "";
637 var hostActiveVersion = "";
638 var imageType = "";
639 var extendedVersions = [];
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600640 var functionalImages = [];
Iftekharul Islamc0161392017-06-14 15:46:15 -0500641
642 function getFormatedExtendedVersions(extendedVersion){
643 var versions = [];
644 extendedVersion = extendedVersion.split(",");
645
646 extendedVersion.forEach(function(item){
647 var parts = item.split("-");
648 var numberIndex = 0;
649 for(var i = 0; i < parts.length; i++){
650 if(/[0-9]/.test(parts[i])){
651 numberIndex = i;
652 break;
653 }
654 }
655 var titlePart = parts.splice(0, numberIndex);
656 titlePart = titlePart.join("");
657 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
658 var versionPart = parts.join("-");
659 versions.push({
660 title: titlePart,
661 version: versionPart
662 });
663 });
664
665 return versions;
666 }
667
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600668 // Get the list of functional images so we can compare
669 // later if an image is functional
670 if (content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH])
671 {
672 functionalImages = content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH].endpoints;
673 }
Iftekharul Islamc0161392017-06-14 15:46:15 -0500674 for(var key in content.data){
675 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
Gunnar Mills902c38c2018-02-23 10:12:39 -0600676 // If the image is "Functional" use that for the
677 // activation status, else use the value of "Activation"
678 // github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
679 activationStatus = content.data[key].Activation.split(".").pop();
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600680 if (functionalImages.includes(key))
Gunnar Mills902c38c2018-02-23 10:12:39 -0600681 {
682 activationStatus = "Functional";
683 }
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600684
Iftekharul Islamc0161392017-06-14 15:46:15 -0500685 imageType = content.data[key].Purpose.split(".").pop();
686 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
687 if(isExtended){
688 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
689 }
690 data.push(Object.assign({
691 path: key,
Gunnar Mills902c38c2018-02-23 10:12:39 -0600692 activationStatus: activationStatus,
Iftekharul Islamc0161392017-06-14 15:46:15 -0500693 imageId: key.split("/").pop(),
694 imageType: imageType,
695 isExtended: isExtended,
696 extended: {
697 show: false,
698 versions: extendedVersions
699 },
700 data: {key: key, value: content.data[key]}
701 }, content.data[key]));
702
Gunnar Mills902c38c2018-02-23 10:12:39 -0600703 if(activationStatus == 'Functional' && imageType == 'BMC'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500704 bmcActiveVersion = content.data[key].Version;
705 }
706
Gunnar Mills902c38c2018-02-23 10:12:39 -0600707 if(activationStatus == 'Functional' && imageType == 'Host'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500708 hostActiveVersion = content.data[key].Version;
709 }
710 }
711 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500712
713 deferred.resolve({
Gunnar Millseedefd32018-02-28 17:02:34 -0600714 data: data,
715 bmcActiveVersion: bmcActiveVersion,
Michael Davisdf3bd122017-08-10 11:03:42 -0500716 hostActiveVersion: hostActiveVersion
717 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700718 }, function(error){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500719 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500720 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500721 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500722
723 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500724 },
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500725 changePriority: function(imageId, priority){
726 var deferred = $q.defer();
727 $http({
728 method: 'PUT',
729 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Priority",
730 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500731 'Accept': 'application/json',
732 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500733 },
734 withCredentials: true,
735 data: JSON.stringify({"data": priority})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700736 }).then(function(response){
737 var json = JSON.stringify(response.data);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500738 var content = JSON.parse(json);
739 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700740 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500741 console.log(error);
742 deferred.reject(error);
743 });
744
745 return deferred.promise;
746 },
Iftekharul Islam2a489552017-11-02 13:23:08 -0500747 deleteImage: function(imageId){
748 var deferred = $q.defer();
749 $http({
750 method: 'POST',
751 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/action/Delete",
752 headers: {
753 'Accept': 'application/json',
754 'Content-Type': 'application/json'
755 },
756 withCredentials: true,
757 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700758 }).then(function(response){
759 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500760 var content = JSON.parse(json);
761 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700762 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500763 console.log(error);
764 deferred.reject(error);
765 });
766
767 return deferred.promise;
768 },
769 activateImage: function(imageId){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500770 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500771 $http({
772 method: 'PUT',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500773 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/RequestedActivation",
774 headers: {
775 'Accept': 'application/json',
776 'Content-Type': 'application/json'
777 },
778 withCredentials: true,
779 data: JSON.stringify({"data": Constants.FIRMWARE.ACTIVATE_FIRMWARE})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700780 }).then(function(response){
781 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500782 var content = JSON.parse(json);
783 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700784 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500785 console.log(error);
786 deferred.reject(error);
787 });
788
789 return deferred.promise;
790 },
791 uploadImage: function(file){
792 var deferred = $q.defer();
793 $http({
794 method: 'POST',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500795 timeout: 5 * 60 * 1000,
Gunnar Millsdddb1492018-02-19 16:27:27 -0600796 url: DataService.getHost() + "/upload/image",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500797 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500798 'Content-Type': 'application/octet-stream'
Iftekharul Islamc0161392017-06-14 15:46:15 -0500799 },
800 withCredentials: true,
801 data: file
Ed Tanousbbcf6702017-10-06 13:53:06 -0700802 }).then(function(response){
803 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500804 var content = JSON.parse(json);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500805 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700806 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500807 console.log(error);
808 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500809 });
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500810
811 return deferred.promise;
812 },
813 downloadImage: function(host, filename){
814 var deferred = $q.defer();
815 $http({
816 method: 'POST',
Gunnar Millse345cac2018-02-20 11:16:53 -0600817 url: DataService.getHost() + "/xyz/openbmc_project/software/action/DownloadViaTFTP",
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500818 headers: {
819 'Accept': 'application/json',
820 'Content-Type': 'application/json'
821 },
822 withCredentials: true,
Gunnar Millse345cac2018-02-20 11:16:53 -0600823 data: JSON.stringify({"data": [filename, host]}),
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500824 responseType: 'arraybuffer'
Ed Tanousbbcf6702017-10-06 13:53:06 -0700825 }).then(function(response, status, headers){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500826 deferred.resolve({
827 data: response,
828 status: status,
829 headers: headers
830 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700831 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500832 console.log(error);
833 deferred.reject(error);
834 });
835
836 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500837 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500838 getBMCEthernetInfo: function(){
839 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500840 $http({
841 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500842 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500843 headers: {
844 'Accept': 'application/json',
845 'Content-Type': 'application/json'
846 },
847 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700848 }).then(function(response){
849 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500850 var content = JSON.parse(json);
851 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700852 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500853 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500854 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500855 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500856
857 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500858 },
859 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500860 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500861 $http({
862 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500863 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500864 headers: {
865 'Accept': 'application/json',
866 'Content-Type': 'application/json'
867 },
868 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700869 }).then(function(response){
870 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500871 var content = JSON.parse(json);
872 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700873 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500874 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500875 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500876 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500877 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500878 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500879 getHardwares: function(callback){
880 $http({
881 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500882 url: DataService.getHost() + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500883 headers: {
884 'Accept': 'application/json',
885 'Content-Type': 'application/json'
886 },
887 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700888 }).then(function(response){
889 var json = JSON.stringify(response.data);
Iftekharul Islamee27d752017-07-05 15:54:31 -0500890 var content = JSON.parse(json);
891 var hardwareData = [];
892 var keyIndexMap = {};
893 var title = "";
894 var data = [];
895 var searchText = "";
896 var componentIndex = -1;
897 var tempParts = [];
898
899
900 function isSubComponent(key){
901
902 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
903 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
904 }
905
906 return false;
907 }
908
909 function titlelize(title){
910 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
911 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
912 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
913 return title.toUpperCase();
914 }
915 }
916
917 return title;
918 }
919
920 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500921 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500922 for(var key in obj){
923 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
924 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500925 value = obj[key];
926 if(value == 1 || value == 0){
927 value = (value == 1) ? 'Yes' : 'No';
928 }
929 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500930 }
931 }
932
933 return transformed;
934 }
935
936 function getSearchText(data){
937 var searchText = "";
938 for(var i = 0; i < data.length; i++){
939 searchText += " " + data[i].key + " " + data[i].value;
940 }
941
Gunnar Millseedefd32018-02-28 17:02:34 -0600942 return searchText;
Iftekharul Islamee27d752017-07-05 15:54:31 -0500943 }
944
945 for(var key in content.data){
Gunnar Millseedefd32018-02-28 17:02:34 -0600946 if(content.data.hasOwnProperty(key) &&
Iftekharul Islamee27d752017-07-05 15:54:31 -0500947 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
948
949 data = camelcaseToLabel(content.data[key]);
950 searchText = getSearchText(data);
951 title = key.split("/").pop();
952
953 title = titlelize(title);
954
955 if(!isSubComponent(key)){
956 hardwareData.push(Object.assign({
957 path: key,
958 title: title,
959 selected: false,
960 expanded: false,
961 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
Gunnar Millseedefd32018-02-28 17:02:34 -0600962 sub_components: [],
Iftekharul Islamee27d752017-07-05 15:54:31 -0500963 original_data: {key: key, value: content.data[key]}
964 }, {items: data}));
965
966 keyIndexMap[key] = hardwareData.length - 1;
967 }else{
968 var tempParts = key.split("/");
969 tempParts.pop();
970 tempParts = tempParts.join("/");
971 componentIndex = keyIndexMap[tempParts];
972 data = content.data[key];
973 data.title = title;
974 hardwareData[componentIndex].sub_components.push(data);
975 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
976 }
977 }
978 }
979
980 if(callback){
981 callback(hardwareData, content.data);
982 }else{
983 return { data: hardwareData, original_data: content.data};
984 }
985 });
986 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500987 deleteLogs: function(logs) {
988 var defer = $q.defer();
989 var promises = [];
990
991 function finished(){
992 defer.resolve();
993 }
994
995 logs.forEach(function(item){
996 promises.push($http({
997 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500998 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
Iftekharul Islamf2d74642017-07-10 16:42:14 -0500999 headers: {
1000 'Accept': 'application/json',
1001 'Content-Type': 'application/json'
1002 },
1003 withCredentials: true,
1004 data: JSON.stringify({"data": []})
1005 }));
1006 });
1007
1008 $q.all(promises).then(finished);
1009
1010 return defer.promise;
1011 },
1012 resolveLogs: function(logs) {
1013 var defer = $q.defer();
1014 var promises = [];
1015
1016 function finished(){
1017 defer.resolve();
1018 }
1019
1020 logs.forEach(function(item){
1021 promises.push($http({
1022 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001023 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001024 headers: {
1025 'Accept': 'application/json',
1026 'Content-Type': 'application/json'
1027 },
1028 withCredentials: true,
1029 data: JSON.stringify({"data": "1"})
1030 }));
1031 });
1032
1033 $q.all(promises).then(finished);
1034
1035 return defer.promise;
1036 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001037 };
1038 return SERVICE;
1039 }]);
1040
1041 })(window.angular);