blob: c8a7969663fbc609c0a87a992eda30de8f9a1a2f [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 },
Gunnar Mills32581cf2018-03-16 15:52:54 -0500192 testPassword: function(username, password){
193 // Calls /login without the current session to verify the given password is correct
194 // ignore the interceptor logout on a bad password
195 DataService.ignoreHttpError = true;
196 var deferred = $q.defer();
197 $http({
198 method: 'POST',
199 url: DataService.getHost() + "/login",
200 headers: {
201 'Accept': 'application/json',
202 'Content-Type': 'application/json'
203 },
204 withCredentials: false,
205 data: JSON.stringify({"data": [username, password]})
206 }).then(function(response){
207 var json = JSON.stringify(response.data);
208 var content = JSON.parse(json);
209 DataService.ignoreHttpError = false;
210 deferred.resolve(content.data);
211 }, function(error){
212 DataService.ignoreHttpError = false;
213 deferred.reject(error);
214 });
215 return deferred.promise;
216 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500217 logout: function(callback){
218 $http({
219 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500220 url: DataService.getHost() + "/logout",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500221 headers: {
222 'Accept': 'application/json',
223 'Content-Type': 'application/json'
224 },
225 withCredentials: true,
226 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700227 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500228 if(callback){
Iftekharul Islamde883402018-02-05 11:16:21 -0600229 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500230 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700231 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500232 if(callback){
233 callback(null, error);
234 }
235 console.log(error);
236 });
237 },
Gunnar Mills55a8e392018-03-14 15:37:44 -0500238 changePassword: function(user, newPassword){
239 var deferred = $q.defer();
240 $http({
241 method: 'POST',
242 url: DataService.getHost() + "/xyz/openbmc_project/user/" + user + "/action/SetPassword",
243 headers: {
244 'Accept': 'application/json',
245 'Content-Type': 'application/json'
246 },
247 withCredentials: true,
248 data: JSON.stringify({"data": [newPassword]}),
249 responseType: 'arraybuffer'
250 }).then(function(response, status, headers){
251 deferred.resolve({
252 data: response,
253 status: status,
254 headers: headers
255 });
256 }, function(error){
257 console.log(error);
258 deferred.reject(error);
259 });
260 return deferred.promise;
261 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500262 chassisPowerOn: function(callback){
263 $http({
264 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500265 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500266 headers: {
267 'Accept': 'application/json',
268 'Content-Type': 'application/json'
269 },
270 withCredentials: true,
271 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700272 }).then(function(response){
273 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500274 var content = JSON.parse(json);
275 if(callback){
276 return callback(content.data.CurrentPowerState);
277 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700278 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500279 if(callback){
280 callback(error);
281 }else{
282 console.log(error);
283 }
284 });
285 },
286 chassisPowerOff: function(callback){
287 $http({
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600288 method: 'PUT',
289 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500290 headers: {
291 'Accept': 'application/json',
292 'Content-Type': 'application/json'
293 },
294 withCredentials: true,
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600295 data: JSON.stringify({"data": "xyz.openbmc_project.State.Chassis.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700296 }).then(function(response){
297 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500298 var content = JSON.parse(json);
299 if(callback){
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600300 return callback(content.status);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500301 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700302 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500303 if(callback){
304 callback(error);
305 }else{
306 console.log(error);
307 }
308 });
309 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500310 setLEDState: function(state, callback){
311 $http({
312 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500313 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500314 headers: {
315 'Accept': 'application/json',
316 'Content-Type': 'application/json'
317 },
318 withCredentials: true,
319 data: JSON.stringify({"data": state})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700320 }).then(function(response){
321 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500322 var content = JSON.parse(json);
323 if(callback){
324 return callback(content.status);
325 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700326 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500327 if(callback){
328 callback(error);
329 }else{
330 console.log(error);
331 }
332 });
333 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500334 bmcReboot: function(callback){
335 $http({
336 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500337 url: DataService.getHost() + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
Iftekharul Islam55368122017-03-27 09:46:50 -0500338 headers: {
339 'Accept': 'application/json',
340 'Content-Type': 'application/json'
341 },
342 withCredentials: true,
343 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700344 }).then(function(response){
345 var json = JSON.stringify(response.data);
Iftekharul Islam55368122017-03-27 09:46:50 -0500346 var content = JSON.parse(json);
347 if(callback){
348 return callback(content.status);
349 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700350 }, function(error){
Iftekharul Islam55368122017-03-27 09:46:50 -0500351 if(callback){
352 callback(error);
353 }else{
354 console.log(error);
355 }
356 });
357 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500358 hostPowerOn: function(callback){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500359 $http({
360 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500361 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500362 headers: {
363 'Accept': 'application/json',
364 'Content-Type': 'application/json'
365 },
366 withCredentials: true,
367 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700368 }).then(function(response){
369 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500370 var content = JSON.parse(json);
371 if(callback){
372 return callback(content.status);
373 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700374 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500375 if(callback){
376 callback(error);
377 }else{
378 console.log(error);
379 }
380 });
381 },
382 hostPowerOff: function(callback){
383 $http({
384 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500385 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500386 headers: {
387 'Accept': 'application/json',
388 'Content-Type': 'application/json'
389 },
390 withCredentials: true,
391 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700392 }).then(function(response){
393 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500394 var content = JSON.parse(json);
395 if(callback){
396 return callback(content.status);
397 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700398 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500399 if(callback){
400 callback(error);
401 }else{
402 console.log(error);
403 }
404 });
405 },
406 hostReboot: function(callback){
407 $http({
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600408 method: 'PUT',
409 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500410 headers: {
411 'Accept': 'application/json',
412 'Content-Type': 'application/json'
413 },
414 withCredentials: true,
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600415 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700416 }).then(function(response){
417 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500418 var content = JSON.parse(json);
419 if(callback){
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600420 return callback(content.status);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500421 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700422 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500423 if(callback){
424 callback(error);
425 }else{
426 console.log(error);
427 }
428 });
429 },
430 hostShutdown: function(callback){
431 $http({
432 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500433 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500434 headers: {
435 'Accept': 'application/json',
436 'Content-Type': 'application/json'
437 },
438 withCredentials: true,
439 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700440 }).then(function(response){
441 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500442 var content = JSON.parse(json);
443 if(callback){
444 return callback(content);
445 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700446 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500447 if(callback){
448 callback(error);
449 }else{
450 console.log(error);
451 }
452 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500453 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500454 getLogs: function(){
455 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500456 $http({
457 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500458 url: DataService.getHost() + "/xyz/openbmc_project/logging/enumerate",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500459 headers: {
460 'Accept': 'application/json',
461 'Content-Type': 'application/json'
462 },
463 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700464 }).then(function(response){
465 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500466 var content = JSON.parse(json);
467 var dataClone = JSON.parse(JSON.stringify(content.data));
468 var data = [];
469 var severityCode = '';
470 var priority = '';
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500471 var health = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500472 var relatedItems = [];
473
474 for(var key in content.data){
475 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
476 var severityFlags = {low: false, medium: false, high: false};
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500477 var healthFlags = {critical: false, warning: false, good: false};
Iftekharul Islamcd789502017-04-19 14:37:55 -0500478 severityCode = content.data[key].Severity.split(".").pop();
479 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
480 severityFlags[priority.toLowerCase()] = true;
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500481 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
482 healthFlags[health.toLowerCase()] = true;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500483 relatedItems = [];
484 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500485 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500486 });
487
488 data.push(Object.assign({
489 path: key,
490 copied: false,
491 priority: priority,
492 severity_code: severityCode,
493 severity_flags: severityFlags,
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500494 health_flags: healthFlags,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500495 additional_data: content.data[key].AdditionalData.join("\n"),
Gunnar Mills43a2ed12018-02-08 15:42:30 -0600496 type: content.data[key].Message,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500497 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500498 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500499 meta: false,
500 confirm: false,
501 related_items: relatedItems,
502 data: {key: key, value: content.data[key]}
503 }, content.data[key]));
504 }
505 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500506 deferred.resolve({data: data, original: dataClone});
Ed Tanousbbcf6702017-10-06 13:53:06 -0700507 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500508 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500509 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500510 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500511
512 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500513 },
514 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500515 $http({
516 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500517 url: DataService.getHost() + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500518 headers: {
519 'Accept': 'application/json',
520 'Content-Type': 'application/json'
521 },
522 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700523 }).then(function(response){
524 var json = JSON.stringify(response.data);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500525 var content = JSON.parse(json);
526 var dataClone = JSON.parse(JSON.stringify(content.data));
527 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500528 var severity = {};
529 var title = "";
530 var tempKeyParts = [];
531 var order = 0;
Iftekharul Islam8a122842017-09-11 10:58:16 -0500532 var customOrder = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500533
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500534 function getScaledValue(value, scale){
535 scale = scale + "";
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500536 scale = parseInt(scale, 10);
537 var power = Math.abs(parseInt(scale,10));
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500538
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500539 if(scale > 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500540 value = value * Math.pow(10, power);
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500541 }else if(scale < 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500542 value = value / Math.pow(10, power);
543 }
544 return value;
545 }
546
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500547 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500548 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
549
Gunnar Millseedefd32018-02-28 17:02:34 -0600550 if(reading.hasOwnProperty('CriticalLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500551 reading.Value < reading.CriticalLow
552 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500553 severityFlags.critical = true;
554 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500555 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600556 }else if(reading.hasOwnProperty('CriticalHigh') &&
557 reading.Value > reading.CriticalHigh
Iftekharul Islam8947e702017-07-27 10:28:07 -0500558 ){
559 severityFlags.critical = true;
560 severityText = 'critical';
561 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600562 }else if(reading.hasOwnProperty('CriticalLow') &&
563 reading.hasOwnProperty('WarningLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500564 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500565 severityFlags.warning = true;
566 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500567 order = 1;
Gunnar Millseedefd32018-02-28 17:02:34 -0600568 }else if(reading.hasOwnProperty('WarningHigh') &&
569 reading.hasOwnProperty('CriticalHigh') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500570 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
571 severityFlags.warning = true;
572 severityText = 'warning';
573 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500574 }else{
575 severityFlags.normal = true;
576 severityText = 'normal';
577 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500578 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500579 }
580
581 for(var key in content.data){
582 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500583
584 severity = getSensorStatus(content.data[key]);
585
586 if(!content.data[key].hasOwnProperty('CriticalLow')){
587 content.data[key].CriticalLow = "--";
588 content.data[key].CriticalHigh = "--";
589 }
590
591 if(!content.data[key].hasOwnProperty('WarningLow')){
592 content.data[key].WarningLow = "--";
593 content.data[key].WarningHigh = "--";
594 }
595
596 tempKeyParts = key.split("/");
597 title = tempKeyParts.pop();
598 title = tempKeyParts.pop() + '_' + title;
599 title = title.split("_").map(function(item){
600 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
601 }).reduce(function(prev, el){
602 return prev + " " + el;
603 });
604
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500605 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
Gunnar Mills022f5642018-02-07 14:30:17 -0600606 content.data[key].CriticalLow = getScaledValue(content.data[key].CriticalLow, content.data[key].Scale);
607 content.data[key].CriticalHigh = getScaledValue(content.data[key].CriticalHigh, content.data[key].Scale);
608 content.data[key].WarningLow = getScaledValue(content.data[key].WarningLow, content.data[key].Scale);
609 content.data[key].WarningHigh = getScaledValue(content.data[key].WarningHigh, content.data[key].Scale);
Iftekharul Islam8a122842017-09-11 10:58:16 -0500610 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
611 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
612 }else{
613 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
614 }
615
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500616 sensorData.push(Object.assign({
617 path: key,
618 selected: false,
619 confirm: false,
620 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500621 title: title,
622 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
623 severity_flags: severity.flags,
624 status: severity.severityText,
625 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500626 custom_order: customOrder,
Gunnar Millseedefd32018-02-28 17:02:34 -0600627 search_text: (title + " " + content.data[key].Value + " " +
628 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
629 severity.severityText + " " +
Iftekharul Islam8947e702017-07-27 10:28:07 -0500630 content.data[key].CriticalLow + " " +
631 content.data[key].CriticalHigh + " " +
632 content.data[key].WarningLow + " " +
633 content.data[key].WarningHigh + " "
634 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500635 original_data: {key: key, value: content.data[key]}
636 }, content.data[key]));
637 }
638 }
639
Iftekharul Islam8947e702017-07-27 10:28:07 -0500640 callback(sensorData, dataClone);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700641 }, function(error){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500642 console.log(error);
643 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500644 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500645 getFirmwares: function(){
646 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500647 $http({
648 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500649 url: DataService.getHost() + "/xyz/openbmc_project/software/enumerate",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500650 headers: {
651 'Accept': 'application/json',
652 'Content-Type': 'application/json'
653 },
654 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700655 }).then(function(response){
656 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500657 var content = JSON.parse(json);
658 var data = [];
Gunnar Mills902c38c2018-02-23 10:12:39 -0600659 var activationStatus = "";
Iftekharul Islamc0161392017-06-14 15:46:15 -0500660 var isExtended = false;
661 var bmcActiveVersion = "";
662 var hostActiveVersion = "";
663 var imageType = "";
664 var extendedVersions = [];
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600665 var functionalImages = [];
Iftekharul Islamc0161392017-06-14 15:46:15 -0500666
667 function getFormatedExtendedVersions(extendedVersion){
668 var versions = [];
669 extendedVersion = extendedVersion.split(",");
670
671 extendedVersion.forEach(function(item){
672 var parts = item.split("-");
673 var numberIndex = 0;
674 for(var i = 0; i < parts.length; i++){
675 if(/[0-9]/.test(parts[i])){
676 numberIndex = i;
677 break;
678 }
679 }
680 var titlePart = parts.splice(0, numberIndex);
681 titlePart = titlePart.join("");
682 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
683 var versionPart = parts.join("-");
684 versions.push({
685 title: titlePart,
686 version: versionPart
687 });
688 });
689
690 return versions;
691 }
692
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600693 // Get the list of functional images so we can compare
694 // later if an image is functional
695 if (content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH])
696 {
697 functionalImages = content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH].endpoints;
698 }
Iftekharul Islamc0161392017-06-14 15:46:15 -0500699 for(var key in content.data){
700 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
Gunnar Mills902c38c2018-02-23 10:12:39 -0600701 // If the image is "Functional" use that for the
702 // activation status, else use the value of "Activation"
703 // github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
704 activationStatus = content.data[key].Activation.split(".").pop();
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600705 if (functionalImages.includes(key))
Gunnar Mills902c38c2018-02-23 10:12:39 -0600706 {
707 activationStatus = "Functional";
708 }
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600709
Iftekharul Islamc0161392017-06-14 15:46:15 -0500710 imageType = content.data[key].Purpose.split(".").pop();
711 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
712 if(isExtended){
713 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
714 }
715 data.push(Object.assign({
716 path: key,
Gunnar Mills902c38c2018-02-23 10:12:39 -0600717 activationStatus: activationStatus,
Iftekharul Islamc0161392017-06-14 15:46:15 -0500718 imageId: key.split("/").pop(),
719 imageType: imageType,
720 isExtended: isExtended,
721 extended: {
722 show: false,
723 versions: extendedVersions
724 },
725 data: {key: key, value: content.data[key]}
726 }, content.data[key]));
727
Gunnar Mills902c38c2018-02-23 10:12:39 -0600728 if(activationStatus == 'Functional' && imageType == 'BMC'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500729 bmcActiveVersion = content.data[key].Version;
730 }
731
Gunnar Mills902c38c2018-02-23 10:12:39 -0600732 if(activationStatus == 'Functional' && imageType == 'Host'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500733 hostActiveVersion = content.data[key].Version;
734 }
735 }
736 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500737
738 deferred.resolve({
Gunnar Millseedefd32018-02-28 17:02:34 -0600739 data: data,
740 bmcActiveVersion: bmcActiveVersion,
Michael Davisdf3bd122017-08-10 11:03:42 -0500741 hostActiveVersion: hostActiveVersion
742 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700743 }, function(error){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500744 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500745 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500746 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500747
748 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500749 },
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500750 changePriority: function(imageId, priority){
751 var deferred = $q.defer();
752 $http({
753 method: 'PUT',
754 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Priority",
755 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500756 'Accept': 'application/json',
757 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500758 },
759 withCredentials: true,
760 data: JSON.stringify({"data": priority})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700761 }).then(function(response){
762 var json = JSON.stringify(response.data);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500763 var content = JSON.parse(json);
764 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700765 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500766 console.log(error);
767 deferred.reject(error);
768 });
769
770 return deferred.promise;
771 },
Iftekharul Islam2a489552017-11-02 13:23:08 -0500772 deleteImage: function(imageId){
773 var deferred = $q.defer();
774 $http({
775 method: 'POST',
776 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/action/Delete",
777 headers: {
778 'Accept': 'application/json',
779 'Content-Type': 'application/json'
780 },
781 withCredentials: true,
782 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700783 }).then(function(response){
784 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500785 var content = JSON.parse(json);
786 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700787 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500788 console.log(error);
789 deferred.reject(error);
790 });
791
792 return deferred.promise;
793 },
794 activateImage: function(imageId){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500795 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500796 $http({
797 method: 'PUT',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500798 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/RequestedActivation",
799 headers: {
800 'Accept': 'application/json',
801 'Content-Type': 'application/json'
802 },
803 withCredentials: true,
804 data: JSON.stringify({"data": Constants.FIRMWARE.ACTIVATE_FIRMWARE})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700805 }).then(function(response){
806 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500807 var content = JSON.parse(json);
808 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700809 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500810 console.log(error);
811 deferred.reject(error);
812 });
813
814 return deferred.promise;
815 },
816 uploadImage: function(file){
817 var deferred = $q.defer();
818 $http({
819 method: 'POST',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500820 timeout: 5 * 60 * 1000,
Gunnar Millsdddb1492018-02-19 16:27:27 -0600821 url: DataService.getHost() + "/upload/image",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500822 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500823 'Content-Type': 'application/octet-stream'
Iftekharul Islamc0161392017-06-14 15:46:15 -0500824 },
825 withCredentials: true,
826 data: file
Ed Tanousbbcf6702017-10-06 13:53:06 -0700827 }).then(function(response){
828 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500829 var content = JSON.parse(json);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500830 deferred.resolve(content);
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);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500834 });
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500835
836 return deferred.promise;
837 },
838 downloadImage: function(host, filename){
839 var deferred = $q.defer();
840 $http({
841 method: 'POST',
Gunnar Millse345cac2018-02-20 11:16:53 -0600842 url: DataService.getHost() + "/xyz/openbmc_project/software/action/DownloadViaTFTP",
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500843 headers: {
844 'Accept': 'application/json',
845 'Content-Type': 'application/json'
846 },
847 withCredentials: true,
Gunnar Millse345cac2018-02-20 11:16:53 -0600848 data: JSON.stringify({"data": [filename, host]}),
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500849 responseType: 'arraybuffer'
Ed Tanousbbcf6702017-10-06 13:53:06 -0700850 }).then(function(response, status, headers){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500851 deferred.resolve({
852 data: response,
853 status: status,
854 headers: headers
855 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700856 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500857 console.log(error);
858 deferred.reject(error);
859 });
860
861 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500862 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500863 getBMCEthernetInfo: function(){
864 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500865 $http({
866 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500867 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500868 headers: {
869 'Accept': 'application/json',
870 'Content-Type': 'application/json'
871 },
872 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700873 }).then(function(response){
874 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500875 var content = JSON.parse(json);
876 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700877 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500878 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500879 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500880 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500881
882 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500883 },
884 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500885 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500886 $http({
887 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500888 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500889 headers: {
890 'Accept': 'application/json',
891 'Content-Type': 'application/json'
892 },
893 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700894 }).then(function(response){
895 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500896 var content = JSON.parse(json);
897 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700898 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500899 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500900 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500901 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500902 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500903 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500904 getHardwares: function(callback){
905 $http({
906 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500907 url: DataService.getHost() + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500908 headers: {
909 'Accept': 'application/json',
910 'Content-Type': 'application/json'
911 },
912 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700913 }).then(function(response){
914 var json = JSON.stringify(response.data);
Iftekharul Islamee27d752017-07-05 15:54:31 -0500915 var content = JSON.parse(json);
916 var hardwareData = [];
917 var keyIndexMap = {};
918 var title = "";
919 var data = [];
920 var searchText = "";
921 var componentIndex = -1;
922 var tempParts = [];
923
924
925 function isSubComponent(key){
926
927 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
928 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
929 }
930
931 return false;
932 }
933
934 function titlelize(title){
935 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
936 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
937 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
938 return title.toUpperCase();
939 }
940 }
941
942 return title;
943 }
944
945 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500946 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500947 for(var key in obj){
948 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
949 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500950 value = obj[key];
951 if(value == 1 || value == 0){
952 value = (value == 1) ? 'Yes' : 'No';
953 }
954 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500955 }
956 }
957
958 return transformed;
959 }
960
961 function getSearchText(data){
962 var searchText = "";
963 for(var i = 0; i < data.length; i++){
964 searchText += " " + data[i].key + " " + data[i].value;
965 }
966
Gunnar Millseedefd32018-02-28 17:02:34 -0600967 return searchText;
Iftekharul Islamee27d752017-07-05 15:54:31 -0500968 }
969
970 for(var key in content.data){
Gunnar Millseedefd32018-02-28 17:02:34 -0600971 if(content.data.hasOwnProperty(key) &&
Iftekharul Islamee27d752017-07-05 15:54:31 -0500972 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
973
974 data = camelcaseToLabel(content.data[key]);
975 searchText = getSearchText(data);
976 title = key.split("/").pop();
977
978 title = titlelize(title);
979
980 if(!isSubComponent(key)){
981 hardwareData.push(Object.assign({
982 path: key,
983 title: title,
984 selected: false,
985 expanded: false,
986 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
Gunnar Millseedefd32018-02-28 17:02:34 -0600987 sub_components: [],
Iftekharul Islamee27d752017-07-05 15:54:31 -0500988 original_data: {key: key, value: content.data[key]}
989 }, {items: data}));
990
991 keyIndexMap[key] = hardwareData.length - 1;
992 }else{
993 var tempParts = key.split("/");
994 tempParts.pop();
995 tempParts = tempParts.join("/");
996 componentIndex = keyIndexMap[tempParts];
997 data = content.data[key];
998 data.title = title;
999 hardwareData[componentIndex].sub_components.push(data);
1000 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
1001 }
1002 }
1003 }
1004
1005 if(callback){
1006 callback(hardwareData, content.data);
1007 }else{
1008 return { data: hardwareData, original_data: content.data};
1009 }
1010 });
1011 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001012 deleteLogs: 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: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001023 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
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": []})
1030 }));
1031 });
1032
1033 $q.all(promises).then(finished);
1034
1035 return defer.promise;
1036 },
1037 resolveLogs: function(logs) {
1038 var defer = $q.defer();
1039 var promises = [];
1040
1041 function finished(){
1042 defer.resolve();
1043 }
1044
1045 logs.forEach(function(item){
1046 promises.push($http({
1047 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001048 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001049 headers: {
1050 'Accept': 'application/json',
1051 'Content-Type': 'application/json'
1052 },
1053 withCredentials: true,
1054 data: JSON.stringify({"data": "1"})
1055 }));
1056 });
1057
1058 $q.all(promises).then(finished);
1059
1060 return defer.promise;
1061 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001062 };
1063 return SERVICE;
1064 }]);
1065
1066 })(window.angular);