blob: 980f1a29da11f50bd87849501212d0e021591e2f [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;
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500196 return $http({
Gunnar Mills32581cf2018-03-16 15:52:54 -0500197 method: 'POST',
198 url: DataService.getHost() + "/login",
199 headers: {
200 'Accept': 'application/json',
201 'Content-Type': 'application/json'
202 },
203 withCredentials: false,
204 data: JSON.stringify({"data": [username, password]})
205 }).then(function(response){
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500206 return response.data;
Gunnar Mills32581cf2018-03-16 15:52:54 -0500207 });
Gunnar Mills32581cf2018-03-16 15:52:54 -0500208 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500209 logout: function(callback){
210 $http({
211 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500212 url: DataService.getHost() + "/logout",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500213 headers: {
214 'Accept': 'application/json',
215 'Content-Type': 'application/json'
216 },
217 withCredentials: true,
218 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700219 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500220 if(callback){
Iftekharul Islamde883402018-02-05 11:16:21 -0600221 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500222 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700223 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500224 if(callback){
225 callback(null, error);
226 }
227 console.log(error);
228 });
229 },
Gunnar Mills55a8e392018-03-14 15:37:44 -0500230 changePassword: function(user, newPassword){
231 var deferred = $q.defer();
232 $http({
233 method: 'POST',
234 url: DataService.getHost() + "/xyz/openbmc_project/user/" + user + "/action/SetPassword",
235 headers: {
236 'Accept': 'application/json',
237 'Content-Type': 'application/json'
238 },
239 withCredentials: true,
240 data: JSON.stringify({"data": [newPassword]}),
241 responseType: 'arraybuffer'
242 }).then(function(response, status, headers){
243 deferred.resolve({
244 data: response,
245 status: status,
246 headers: headers
247 });
248 }, function(error){
249 console.log(error);
250 deferred.reject(error);
251 });
252 return deferred.promise;
253 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500254 chassisPowerOn: function(callback){
255 $http({
256 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500257 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500258 headers: {
259 'Accept': 'application/json',
260 'Content-Type': 'application/json'
261 },
262 withCredentials: true,
263 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700264 }).then(function(response){
265 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500266 var content = JSON.parse(json);
267 if(callback){
268 return callback(content.data.CurrentPowerState);
269 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700270 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500271 if(callback){
272 callback(error);
273 }else{
274 console.log(error);
275 }
276 });
277 },
278 chassisPowerOff: function(callback){
279 $http({
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600280 method: 'PUT',
281 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500282 headers: {
283 'Accept': 'application/json',
284 'Content-Type': 'application/json'
285 },
286 withCredentials: true,
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600287 data: JSON.stringify({"data": "xyz.openbmc_project.State.Chassis.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700288 }).then(function(response){
289 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500290 var content = JSON.parse(json);
291 if(callback){
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600292 return callback(content.status);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500293 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700294 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500295 if(callback){
296 callback(error);
297 }else{
298 console.log(error);
299 }
300 });
301 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500302 setLEDState: function(state, callback){
303 $http({
304 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500305 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500306 headers: {
307 'Accept': 'application/json',
308 'Content-Type': 'application/json'
309 },
310 withCredentials: true,
311 data: JSON.stringify({"data": state})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700312 }).then(function(response){
313 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500314 var content = JSON.parse(json);
315 if(callback){
316 return callback(content.status);
317 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700318 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500319 if(callback){
320 callback(error);
321 }else{
322 console.log(error);
323 }
324 });
325 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500326 bmcReboot: function(callback){
327 $http({
328 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500329 url: DataService.getHost() + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
Iftekharul Islam55368122017-03-27 09:46:50 -0500330 headers: {
331 'Accept': 'application/json',
332 'Content-Type': 'application/json'
333 },
334 withCredentials: true,
335 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700336 }).then(function(response){
337 var json = JSON.stringify(response.data);
Iftekharul Islam55368122017-03-27 09:46:50 -0500338 var content = JSON.parse(json);
339 if(callback){
340 return callback(content.status);
341 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700342 }, function(error){
Iftekharul Islam55368122017-03-27 09:46:50 -0500343 if(callback){
344 callback(error);
345 }else{
346 console.log(error);
347 }
348 });
349 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500350 hostPowerOn: function(callback){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500351 $http({
352 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500353 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500354 headers: {
355 'Accept': 'application/json',
356 'Content-Type': 'application/json'
357 },
358 withCredentials: true,
359 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700360 }).then(function(response){
361 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500362 var content = JSON.parse(json);
363 if(callback){
364 return callback(content.status);
365 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700366 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500367 if(callback){
368 callback(error);
369 }else{
370 console.log(error);
371 }
372 });
373 },
374 hostPowerOff: function(callback){
375 $http({
376 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500377 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500378 headers: {
379 'Accept': 'application/json',
380 'Content-Type': 'application/json'
381 },
382 withCredentials: true,
383 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700384 }).then(function(response){
385 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500386 var content = JSON.parse(json);
387 if(callback){
388 return callback(content.status);
389 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700390 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500391 if(callback){
392 callback(error);
393 }else{
394 console.log(error);
395 }
396 });
397 },
398 hostReboot: function(callback){
399 $http({
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600400 method: 'PUT',
401 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500402 headers: {
403 'Accept': 'application/json',
404 'Content-Type': 'application/json'
405 },
406 withCredentials: true,
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600407 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700408 }).then(function(response){
409 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500410 var content = JSON.parse(json);
411 if(callback){
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600412 return callback(content.status);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500413 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700414 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500415 if(callback){
416 callback(error);
417 }else{
418 console.log(error);
419 }
420 });
421 },
422 hostShutdown: function(callback){
423 $http({
424 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500425 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500426 headers: {
427 'Accept': 'application/json',
428 'Content-Type': 'application/json'
429 },
430 withCredentials: true,
431 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700432 }).then(function(response){
433 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500434 var content = JSON.parse(json);
435 if(callback){
436 return callback(content);
437 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700438 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500439 if(callback){
440 callback(error);
441 }else{
442 console.log(error);
443 }
444 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500445 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500446 getLogs: function(){
447 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500448 $http({
449 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500450 url: DataService.getHost() + "/xyz/openbmc_project/logging/enumerate",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500451 headers: {
452 'Accept': 'application/json',
453 'Content-Type': 'application/json'
454 },
455 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700456 }).then(function(response){
457 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500458 var content = JSON.parse(json);
459 var dataClone = JSON.parse(JSON.stringify(content.data));
460 var data = [];
461 var severityCode = '';
462 var priority = '';
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500463 var health = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500464 var relatedItems = [];
465
466 for(var key in content.data){
467 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
468 var severityFlags = {low: false, medium: false, high: false};
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500469 var healthFlags = {critical: false, warning: false, good: false};
Iftekharul Islamcd789502017-04-19 14:37:55 -0500470 severityCode = content.data[key].Severity.split(".").pop();
471 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
472 severityFlags[priority.toLowerCase()] = true;
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500473 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
474 healthFlags[health.toLowerCase()] = true;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500475 relatedItems = [];
476 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500477 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500478 });
479
480 data.push(Object.assign({
481 path: key,
482 copied: false,
483 priority: priority,
484 severity_code: severityCode,
485 severity_flags: severityFlags,
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500486 health_flags: healthFlags,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500487 additional_data: content.data[key].AdditionalData.join("\n"),
Gunnar Mills43a2ed12018-02-08 15:42:30 -0600488 type: content.data[key].Message,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500489 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500490 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500491 meta: false,
492 confirm: false,
493 related_items: relatedItems,
494 data: {key: key, value: content.data[key]}
495 }, content.data[key]));
496 }
497 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500498 deferred.resolve({data: data, original: dataClone});
Ed Tanousbbcf6702017-10-06 13:53:06 -0700499 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500500 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500501 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500502 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500503
504 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500505 },
506 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500507 $http({
508 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500509 url: DataService.getHost() + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500510 headers: {
511 'Accept': 'application/json',
512 'Content-Type': 'application/json'
513 },
514 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700515 }).then(function(response){
516 var json = JSON.stringify(response.data);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500517 var content = JSON.parse(json);
518 var dataClone = JSON.parse(JSON.stringify(content.data));
519 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500520 var severity = {};
521 var title = "";
522 var tempKeyParts = [];
523 var order = 0;
Iftekharul Islam8a122842017-09-11 10:58:16 -0500524 var customOrder = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500525
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500526 function getScaledValue(value, scale){
527 scale = scale + "";
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500528 scale = parseInt(scale, 10);
529 var power = Math.abs(parseInt(scale,10));
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500530
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500531 if(scale > 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500532 value = value * Math.pow(10, power);
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500533 }else if(scale < 0){
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500534 value = value / Math.pow(10, power);
535 }
536 return value;
537 }
538
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500539 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500540 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
541
Gunnar Millseedefd32018-02-28 17:02:34 -0600542 if(reading.hasOwnProperty('CriticalLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500543 reading.Value < reading.CriticalLow
544 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500545 severityFlags.critical = true;
546 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500547 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600548 }else if(reading.hasOwnProperty('CriticalHigh') &&
549 reading.Value > reading.CriticalHigh
Iftekharul Islam8947e702017-07-27 10:28:07 -0500550 ){
551 severityFlags.critical = true;
552 severityText = 'critical';
553 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600554 }else if(reading.hasOwnProperty('CriticalLow') &&
555 reading.hasOwnProperty('WarningLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500556 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500557 severityFlags.warning = true;
558 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500559 order = 1;
Gunnar Millseedefd32018-02-28 17:02:34 -0600560 }else if(reading.hasOwnProperty('WarningHigh') &&
561 reading.hasOwnProperty('CriticalHigh') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500562 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
563 severityFlags.warning = true;
564 severityText = 'warning';
565 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500566 }else{
567 severityFlags.normal = true;
568 severityText = 'normal';
569 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500570 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500571 }
572
573 for(var key in content.data){
574 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500575
576 severity = getSensorStatus(content.data[key]);
577
578 if(!content.data[key].hasOwnProperty('CriticalLow')){
579 content.data[key].CriticalLow = "--";
580 content.data[key].CriticalHigh = "--";
581 }
582
583 if(!content.data[key].hasOwnProperty('WarningLow')){
584 content.data[key].WarningLow = "--";
585 content.data[key].WarningHigh = "--";
586 }
587
588 tempKeyParts = key.split("/");
589 title = tempKeyParts.pop();
590 title = tempKeyParts.pop() + '_' + title;
591 title = title.split("_").map(function(item){
592 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
593 }).reduce(function(prev, el){
594 return prev + " " + el;
595 });
596
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500597 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
Gunnar Mills022f5642018-02-07 14:30:17 -0600598 content.data[key].CriticalLow = getScaledValue(content.data[key].CriticalLow, content.data[key].Scale);
599 content.data[key].CriticalHigh = getScaledValue(content.data[key].CriticalHigh, content.data[key].Scale);
600 content.data[key].WarningLow = getScaledValue(content.data[key].WarningLow, content.data[key].Scale);
601 content.data[key].WarningHigh = getScaledValue(content.data[key].WarningHigh, content.data[key].Scale);
Iftekharul Islam8a122842017-09-11 10:58:16 -0500602 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
603 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
604 }else{
605 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
606 }
607
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500608 sensorData.push(Object.assign({
609 path: key,
610 selected: false,
611 confirm: false,
612 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500613 title: title,
614 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
615 severity_flags: severity.flags,
616 status: severity.severityText,
617 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500618 custom_order: customOrder,
Gunnar Millseedefd32018-02-28 17:02:34 -0600619 search_text: (title + " " + content.data[key].Value + " " +
620 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
621 severity.severityText + " " +
Iftekharul Islam8947e702017-07-27 10:28:07 -0500622 content.data[key].CriticalLow + " " +
623 content.data[key].CriticalHigh + " " +
624 content.data[key].WarningLow + " " +
625 content.data[key].WarningHigh + " "
626 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500627 original_data: {key: key, value: content.data[key]}
628 }, content.data[key]));
629 }
630 }
631
Iftekharul Islam8947e702017-07-27 10:28:07 -0500632 callback(sensorData, dataClone);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700633 }, function(error){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500634 console.log(error);
635 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500636 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500637 getFirmwares: function(){
638 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500639 $http({
640 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500641 url: DataService.getHost() + "/xyz/openbmc_project/software/enumerate",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500642 headers: {
643 'Accept': 'application/json',
644 'Content-Type': 'application/json'
645 },
646 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700647 }).then(function(response){
648 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500649 var content = JSON.parse(json);
650 var data = [];
Gunnar Mills902c38c2018-02-23 10:12:39 -0600651 var activationStatus = "";
Iftekharul Islamc0161392017-06-14 15:46:15 -0500652 var isExtended = false;
653 var bmcActiveVersion = "";
654 var hostActiveVersion = "";
655 var imageType = "";
656 var extendedVersions = [];
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600657 var functionalImages = [];
Iftekharul Islamc0161392017-06-14 15:46:15 -0500658
659 function getFormatedExtendedVersions(extendedVersion){
660 var versions = [];
661 extendedVersion = extendedVersion.split(",");
662
663 extendedVersion.forEach(function(item){
664 var parts = item.split("-");
665 var numberIndex = 0;
666 for(var i = 0; i < parts.length; i++){
667 if(/[0-9]/.test(parts[i])){
668 numberIndex = i;
669 break;
670 }
671 }
672 var titlePart = parts.splice(0, numberIndex);
673 titlePart = titlePart.join("");
674 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
675 var versionPart = parts.join("-");
676 versions.push({
677 title: titlePart,
678 version: versionPart
679 });
680 });
681
682 return versions;
683 }
684
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600685 // Get the list of functional images so we can compare
686 // later if an image is functional
687 if (content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH])
688 {
689 functionalImages = content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH].endpoints;
690 }
Iftekharul Islamc0161392017-06-14 15:46:15 -0500691 for(var key in content.data){
692 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
Gunnar Mills902c38c2018-02-23 10:12:39 -0600693 // If the image is "Functional" use that for the
694 // activation status, else use the value of "Activation"
695 // github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
696 activationStatus = content.data[key].Activation.split(".").pop();
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600697 if (functionalImages.includes(key))
Gunnar Mills902c38c2018-02-23 10:12:39 -0600698 {
699 activationStatus = "Functional";
700 }
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600701
Iftekharul Islamc0161392017-06-14 15:46:15 -0500702 imageType = content.data[key].Purpose.split(".").pop();
703 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
704 if(isExtended){
705 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
706 }
707 data.push(Object.assign({
708 path: key,
Gunnar Mills902c38c2018-02-23 10:12:39 -0600709 activationStatus: activationStatus,
Iftekharul Islamc0161392017-06-14 15:46:15 -0500710 imageId: key.split("/").pop(),
711 imageType: imageType,
712 isExtended: isExtended,
713 extended: {
714 show: false,
715 versions: extendedVersions
716 },
717 data: {key: key, value: content.data[key]}
718 }, content.data[key]));
719
Gunnar Mills902c38c2018-02-23 10:12:39 -0600720 if(activationStatus == 'Functional' && imageType == 'BMC'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500721 bmcActiveVersion = content.data[key].Version;
722 }
723
Gunnar Mills902c38c2018-02-23 10:12:39 -0600724 if(activationStatus == 'Functional' && imageType == 'Host'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500725 hostActiveVersion = content.data[key].Version;
726 }
727 }
728 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500729
730 deferred.resolve({
Gunnar Millseedefd32018-02-28 17:02:34 -0600731 data: data,
732 bmcActiveVersion: bmcActiveVersion,
Michael Davisdf3bd122017-08-10 11:03:42 -0500733 hostActiveVersion: hostActiveVersion
734 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700735 }, function(error){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500736 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500737 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500738 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500739
740 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500741 },
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500742 changePriority: function(imageId, priority){
743 var deferred = $q.defer();
744 $http({
745 method: 'PUT',
746 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Priority",
747 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500748 'Accept': 'application/json',
749 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500750 },
751 withCredentials: true,
752 data: JSON.stringify({"data": priority})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700753 }).then(function(response){
754 var json = JSON.stringify(response.data);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500755 var content = JSON.parse(json);
756 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700757 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500758 console.log(error);
759 deferred.reject(error);
760 });
761
762 return deferred.promise;
763 },
Iftekharul Islam2a489552017-11-02 13:23:08 -0500764 deleteImage: function(imageId){
765 var deferred = $q.defer();
766 $http({
767 method: 'POST',
768 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/action/Delete",
769 headers: {
770 'Accept': 'application/json',
771 'Content-Type': 'application/json'
772 },
773 withCredentials: true,
774 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700775 }).then(function(response){
776 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500777 var content = JSON.parse(json);
778 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700779 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500780 console.log(error);
781 deferred.reject(error);
782 });
783
784 return deferred.promise;
785 },
786 activateImage: function(imageId){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500787 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500788 $http({
789 method: 'PUT',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500790 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/RequestedActivation",
791 headers: {
792 'Accept': 'application/json',
793 'Content-Type': 'application/json'
794 },
795 withCredentials: true,
796 data: JSON.stringify({"data": Constants.FIRMWARE.ACTIVATE_FIRMWARE})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700797 }).then(function(response){
798 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500799 var content = JSON.parse(json);
800 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700801 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500802 console.log(error);
803 deferred.reject(error);
804 });
805
806 return deferred.promise;
807 },
808 uploadImage: function(file){
809 var deferred = $q.defer();
810 $http({
811 method: 'POST',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500812 timeout: 5 * 60 * 1000,
Gunnar Millsdddb1492018-02-19 16:27:27 -0600813 url: DataService.getHost() + "/upload/image",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500814 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500815 'Content-Type': 'application/octet-stream'
Iftekharul Islamc0161392017-06-14 15:46:15 -0500816 },
817 withCredentials: true,
818 data: file
Ed Tanousbbcf6702017-10-06 13:53:06 -0700819 }).then(function(response){
820 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500821 var content = JSON.parse(json);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500822 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700823 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500824 console.log(error);
825 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500826 });
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500827
828 return deferred.promise;
829 },
830 downloadImage: function(host, filename){
831 var deferred = $q.defer();
832 $http({
833 method: 'POST',
Gunnar Millse345cac2018-02-20 11:16:53 -0600834 url: DataService.getHost() + "/xyz/openbmc_project/software/action/DownloadViaTFTP",
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500835 headers: {
836 'Accept': 'application/json',
837 'Content-Type': 'application/json'
838 },
839 withCredentials: true,
Gunnar Millse345cac2018-02-20 11:16:53 -0600840 data: JSON.stringify({"data": [filename, host]}),
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500841 responseType: 'arraybuffer'
Ed Tanousbbcf6702017-10-06 13:53:06 -0700842 }).then(function(response, status, headers){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500843 deferred.resolve({
844 data: response,
845 status: status,
846 headers: headers
847 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700848 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500849 console.log(error);
850 deferred.reject(error);
851 });
852
853 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500854 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500855 getBMCEthernetInfo: function(){
856 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500857 $http({
858 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500859 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500860 headers: {
861 'Accept': 'application/json',
862 'Content-Type': 'application/json'
863 },
864 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700865 }).then(function(response){
866 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500867 var content = JSON.parse(json);
868 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700869 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500870 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500871 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500872 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500873
874 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500875 },
876 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500877 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500878 $http({
879 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500880 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500881 headers: {
882 'Accept': 'application/json',
883 'Content-Type': 'application/json'
884 },
885 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700886 }).then(function(response){
887 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500888 var content = JSON.parse(json);
889 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700890 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500891 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500892 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500893 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500894 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500895 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500896 getHardwares: function(callback){
897 $http({
898 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500899 url: DataService.getHost() + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500900 headers: {
901 'Accept': 'application/json',
902 'Content-Type': 'application/json'
903 },
904 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700905 }).then(function(response){
906 var json = JSON.stringify(response.data);
Iftekharul Islamee27d752017-07-05 15:54:31 -0500907 var content = JSON.parse(json);
908 var hardwareData = [];
909 var keyIndexMap = {};
910 var title = "";
911 var data = [];
912 var searchText = "";
913 var componentIndex = -1;
914 var tempParts = [];
915
916
917 function isSubComponent(key){
918
919 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
920 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
921 }
922
923 return false;
924 }
925
926 function titlelize(title){
927 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
928 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
929 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
930 return title.toUpperCase();
931 }
932 }
933
934 return title;
935 }
936
937 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500938 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500939 for(var key in obj){
940 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
941 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500942 value = obj[key];
943 if(value == 1 || value == 0){
944 value = (value == 1) ? 'Yes' : 'No';
945 }
946 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500947 }
948 }
949
950 return transformed;
951 }
952
953 function getSearchText(data){
954 var searchText = "";
955 for(var i = 0; i < data.length; i++){
956 searchText += " " + data[i].key + " " + data[i].value;
957 }
958
Gunnar Millseedefd32018-02-28 17:02:34 -0600959 return searchText;
Iftekharul Islamee27d752017-07-05 15:54:31 -0500960 }
961
962 for(var key in content.data){
Gunnar Millseedefd32018-02-28 17:02:34 -0600963 if(content.data.hasOwnProperty(key) &&
Iftekharul Islamee27d752017-07-05 15:54:31 -0500964 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
965
966 data = camelcaseToLabel(content.data[key]);
967 searchText = getSearchText(data);
968 title = key.split("/").pop();
969
970 title = titlelize(title);
971
972 if(!isSubComponent(key)){
973 hardwareData.push(Object.assign({
974 path: key,
975 title: title,
976 selected: false,
977 expanded: false,
978 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
Gunnar Millseedefd32018-02-28 17:02:34 -0600979 sub_components: [],
Iftekharul Islamee27d752017-07-05 15:54:31 -0500980 original_data: {key: key, value: content.data[key]}
981 }, {items: data}));
982
983 keyIndexMap[key] = hardwareData.length - 1;
984 }else{
985 var tempParts = key.split("/");
986 tempParts.pop();
987 tempParts = tempParts.join("/");
988 componentIndex = keyIndexMap[tempParts];
989 data = content.data[key];
990 data.title = title;
991 hardwareData[componentIndex].sub_components.push(data);
992 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
Gunnar Millscdd9d6b2018-03-09 11:57:06 -0600993
994 // Sort the subcomponents alphanumeric so they are displayed on the
995 // inventory page in order (e.g. core 0, core 1, core 2, ... core 12, core 13)
996 hardwareData[componentIndex].sub_components.sort(function (a, b) {
997 return a.title.localeCompare(b.title, 'en', { numeric: true });
998 });
Iftekharul Islamee27d752017-07-05 15:54:31 -0500999 }
1000 }
1001 }
1002
1003 if(callback){
1004 callback(hardwareData, content.data);
1005 }else{
1006 return { data: hardwareData, original_data: content.data};
1007 }
1008 });
1009 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001010 deleteLogs: function(logs) {
1011 var defer = $q.defer();
1012 var promises = [];
1013
1014 function finished(){
1015 defer.resolve();
1016 }
1017
1018 logs.forEach(function(item){
1019 promises.push($http({
1020 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001021 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001022 headers: {
1023 'Accept': 'application/json',
1024 'Content-Type': 'application/json'
1025 },
1026 withCredentials: true,
1027 data: JSON.stringify({"data": []})
1028 }));
1029 });
1030
1031 $q.all(promises).then(finished);
1032
1033 return defer.promise;
1034 },
1035 resolveLogs: function(logs) {
1036 var defer = $q.defer();
1037 var promises = [];
1038
1039 function finished(){
1040 defer.resolve();
1041 }
1042
1043 logs.forEach(function(item){
1044 promises.push($http({
1045 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001046 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001047 headers: {
1048 'Accept': 'application/json',
1049 'Content-Type': 'application/json'
1050 },
1051 withCredentials: true,
1052 data: JSON.stringify({"data": "1"})
1053 }));
1054 });
1055
1056 $q.all(promises).then(finished);
1057
1058 return defer.promise;
1059 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001060 };
1061 return SERVICE;
1062 }]);
1063
1064 })(window.angular);