blob: 13f14068ad92cf5e1293d897dfa57dd8150067fe [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
Iftekharul Islam99d199f2017-03-24 15:28:25 -05007 */
8
9window.angular && (function (angular) {
10 'use strict';
11 angular
12 .module('app.common.services')
Iftekharul Islam1acb4122017-11-02 13:20:32 -050013 .factory('APIUtils', ['$http', 'Constants', '$q', 'dataService',function($http, Constants, $q, DataService){
CamVan Nguyen33275832018-03-13 18:38:37 -050014 var getScaledValue = function(value, scale){
15 scale = scale + "";
16 scale = parseInt(scale, 10);
17 var power = Math.abs(parseInt(scale,10));
18
19 if(scale > 0){
20 value = value * Math.pow(10, power);
21 }else if(scale < 0){
22 value = value / Math.pow(10, power);
23 }
24 return value;
25 };
Iftekharul Islam99d199f2017-03-24 15:28:25 -050026 var SERVICE = {
Iftekharul Islam99d199f2017-03-24 15:28:25 -050027 API_CREDENTIALS: Constants.API_CREDENTIALS,
28 API_RESPONSE: Constants.API_RESPONSE,
29 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
30 HOST_STATE_TEXT: Constants.HOST_STATE,
31 HOST_STATE: Constants.HOST_STATE,
Iftekharul Islamcd789502017-04-19 14:37:55 -050032 LED_STATE: Constants.LED_STATE,
33 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
Iftekharul Islam1acb4122017-11-02 13:20:32 -050034 HOST_SESSION_STORAGE_KEY: Constants.API_CREDENTIALS.host_storage_key,
Iftekharul Islama1d238f2018-02-26 12:29:45 -060035 getChassisState: function(){
36 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -050037 $http({
38 method: 'GET',
Iftekharul Islama1d238f2018-02-26 12:29:45 -060039 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/CurrentPowerState",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050040 headers: {
41 'Accept': 'application/json',
42 'Content-Type': 'application/json'
43 },
44 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070045 }).then(function(response){
46 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050047 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060048 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -070049 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050050 console.log(error);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060051 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050052 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -060053 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -050054 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -060055 getHostState: function(){
56 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -050057 $http({
58 method: 'GET',
Iftekharul Islama1d238f2018-02-26 12:29:45 -060059 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/CurrentHostState",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050060 headers: {
61 'Accept': 'application/json',
62 'Content-Type': 'application/json'
63 },
64 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070065 }).then(function(response){
66 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050067 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060068 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -070069 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050070 console.log(error);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060071 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050072 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -060073 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -050074 },
Iftekharul Islam171c6a12017-08-11 08:35:47 -050075 getNetworkInfo: function(){
76 var deferred = $q.defer();
77 $http({
78 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050079 url: DataService.getHost() + "/xyz/openbmc_project/network/enumerate",
Iftekharul Islam171c6a12017-08-11 08:35:47 -050080 headers: {
81 'Accept': 'application/json',
82 'Content-Type': 'application/json'
83 },
84 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070085 }).then(function(response){
86 var json = JSON.stringify(response.data);
Iftekharul Islam171c6a12017-08-11 08:35:47 -050087 var content = JSON.parse(json);
88 var hostname = "";
89 var macAddress = "";
90
Iftekharul Islam2a489552017-11-02 13:23:08 -050091 function parseNetworkData(content){
92 var data = {
93 interface_ids: [],
CamVan Nguyenfbb63db2018-05-02 13:33:51 -050094 interfaces: {},
95 ip_addresses: {ipv4 : [],
96 ipv6 : []},
Iftekharul Islam2a489552017-11-02 13:23:08 -050097 };
98 var interfaceId = '', keyParts = [], interfaceHash = '', interfaceType = '';
99 for(var key in content.data){
100 if(key.match(/network\/eth\d+$/ig)){
101 interfaceId = key.split("/").pop();
102 if(data.interface_ids.indexOf(interfaceId) == -1){
103 data.interface_ids.push(interfaceId);
104 data.interfaces[interfaceId] = {
105 interfaceIname: '',
Gunnar Millsdb44b092018-04-12 13:27:20 -0500106 DomainName:'',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500107 MACAddress:'',
108 Nameservers: [],
109 DHCPEnabled: 0,
110 ipv4:
111 {
112 ids: [],
113 values: []
114 },
115 ipv6:
116 {
117 ids: [],
118 values: []
119 }
120 };
121 data.interfaces[interfaceId].MACAddress = content.data[key].MACAddress;
122 data.interfaces[interfaceId].DomainName = content.data[key].DomainName.join(" ");
123 data.interfaces[interfaceId].Nameservers = content.data[key].Nameservers;
124 data.interfaces[interfaceId].DHCPEnabled = content.data[key].DHCPEnabled;
125 }
126 }else if(key.match(/network\/eth\d+\/ipv[4|6]\/[a-z0-9]+$/ig)){
127 keyParts = key.split("/");
128 interfaceHash = keyParts.pop();
129 interfaceType = keyParts.pop();
130 interfaceId = keyParts.pop();
131
132 if(data.interfaces[interfaceId][interfaceType].ids.indexOf(interfaceHash) == -1){
133 data.interfaces[interfaceId][interfaceType].ids.push(interfaceHash);
134 data.interfaces[interfaceId][interfaceType].values.push(content.data[key]);
CamVan Nguyenfbb63db2018-05-02 13:33:51 -0500135 data.ip_addresses[interfaceType].push(content.data[key]['Address']);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500136 }
137 }
138 }
139 return data;
140 }
141
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500142 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/config') &&
143 content.data['/xyz/openbmc_project/network/config'].hasOwnProperty('HostName')
144 ){
145 hostname = content.data['/xyz/openbmc_project/network/config'].HostName;
146 }
147
148 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/eth0') &&
149 content.data['/xyz/openbmc_project/network/eth0'].hasOwnProperty('MACAddress')
150 ){
151 macAddress = content.data['/xyz/openbmc_project/network/eth0'].MACAddress;
152 }
153
154 deferred.resolve({
155 data: content.data,
156 hostname: hostname,
157 mac_address: macAddress,
Iftekharul Islam2a489552017-11-02 13:23:08 -0500158 formatted_data: parseNetworkData(content)
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500159 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700160 }, function(error){
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500161 console.log(error);
162 deferred.reject(error);
163 });
164 return deferred.promise;
165 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500166 getLEDState: function(){
167 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500168 $http({
169 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500170 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500171 headers: {
172 'Accept': 'application/json',
173 'Content-Type': 'application/json'
174 },
175 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700176 }).then(function(response){
177 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500178 var content = JSON.parse(json);
179 deferred.resolve(content.data.Asserted);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700180 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500181 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500182 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500183 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500184 return deferred.promise;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500185 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500186 login: function(username, password, callback){
187 $http({
188 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500189 url: DataService.getHost() + "/login",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500190 headers: {
191 'Accept': 'application/json',
192 'Content-Type': 'application/json'
193 },
194 withCredentials: true,
195 data: JSON.stringify({"data": [username, password]})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700196 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500197 if(callback){
Ed Tanousbbcf6702017-10-06 13:53:06 -0700198 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500199 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700200 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500201 if(callback){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500202 if(error && error.status && error.status == 'error'){
203 callback(error);
204 }else{
205 callback(error, true);
206 }
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500207 }
208 console.log(error);
209 });
210 },
Gunnar Mills32581cf2018-03-16 15:52:54 -0500211 testPassword: function(username, password){
212 // Calls /login without the current session to verify the given password is correct
213 // ignore the interceptor logout on a bad password
214 DataService.ignoreHttpError = true;
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500215 return $http({
Gunnar Mills32581cf2018-03-16 15:52:54 -0500216 method: 'POST',
217 url: DataService.getHost() + "/login",
218 headers: {
219 'Accept': 'application/json',
220 'Content-Type': 'application/json'
221 },
222 withCredentials: false,
223 data: JSON.stringify({"data": [username, password]})
224 }).then(function(response){
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500225 return response.data;
Gunnar Mills32581cf2018-03-16 15:52:54 -0500226 });
Gunnar Mills32581cf2018-03-16 15:52:54 -0500227 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500228 logout: function(callback){
229 $http({
230 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500231 url: DataService.getHost() + "/logout",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500232 headers: {
233 'Accept': 'application/json',
234 'Content-Type': 'application/json'
235 },
236 withCredentials: true,
237 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700238 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500239 if(callback){
Iftekharul Islamde883402018-02-05 11:16:21 -0600240 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500241 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700242 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500243 if(callback){
244 callback(null, error);
245 }
246 console.log(error);
247 });
248 },
Gunnar Mills55a8e392018-03-14 15:37:44 -0500249 changePassword: function(user, newPassword){
250 var deferred = $q.defer();
251 $http({
252 method: 'POST',
253 url: DataService.getHost() + "/xyz/openbmc_project/user/" + user + "/action/SetPassword",
254 headers: {
255 'Accept': 'application/json',
256 'Content-Type': 'application/json'
257 },
258 withCredentials: true,
259 data: JSON.stringify({"data": [newPassword]}),
260 responseType: 'arraybuffer'
261 }).then(function(response, status, headers){
262 deferred.resolve({
263 data: response,
264 status: status,
265 headers: headers
266 });
267 }, function(error){
268 console.log(error);
269 deferred.reject(error);
270 });
271 return deferred.promise;
272 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500273 chassisPowerOn: function(callback){
274 $http({
275 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500276 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500277 headers: {
278 'Accept': 'application/json',
279 'Content-Type': 'application/json'
280 },
281 withCredentials: true,
282 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700283 }).then(function(response){
284 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500285 var content = JSON.parse(json);
286 if(callback){
287 return callback(content.data.CurrentPowerState);
288 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700289 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500290 if(callback){
291 callback(error);
292 }else{
293 console.log(error);
294 }
295 });
296 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600297 chassisPowerOff: function(){
298 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500299 $http({
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600300 method: 'PUT',
301 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500302 headers: {
303 'Accept': 'application/json',
304 'Content-Type': 'application/json'
305 },
306 withCredentials: true,
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600307 data: JSON.stringify({"data": "xyz.openbmc_project.State.Chassis.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700308 }).then(function(response){
309 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500310 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600311 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700312 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600313 console.log(error);
314 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500315 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600316 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500317 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500318 setLEDState: function(state, callback){
319 $http({
320 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500321 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500322 headers: {
323 'Accept': 'application/json',
324 'Content-Type': 'application/json'
325 },
326 withCredentials: true,
327 data: JSON.stringify({"data": state})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700328 }).then(function(response){
329 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500330 var content = JSON.parse(json);
331 if(callback){
332 return callback(content.status);
333 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700334 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500335 if(callback){
336 callback(error);
337 }else{
338 console.log(error);
339 }
340 });
341 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500342 bmcReboot: function(callback){
343 $http({
344 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500345 url: DataService.getHost() + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
Iftekharul Islam55368122017-03-27 09:46:50 -0500346 headers: {
347 'Accept': 'application/json',
348 'Content-Type': 'application/json'
349 },
350 withCredentials: true,
351 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700352 }).then(function(response){
353 var json = JSON.stringify(response.data);
Iftekharul Islam55368122017-03-27 09:46:50 -0500354 var content = JSON.parse(json);
355 if(callback){
356 return callback(content.status);
357 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700358 }, function(error){
Iftekharul Islam55368122017-03-27 09:46:50 -0500359 if(callback){
360 callback(error);
361 }else{
362 console.log(error);
363 }
364 });
365 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600366 hostPowerOn: function(){
367 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500368 $http({
369 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500370 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500371 headers: {
372 'Accept': 'application/json',
373 'Content-Type': 'application/json'
374 },
375 withCredentials: true,
376 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700377 }).then(function(response){
378 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500379 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600380 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700381 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600382 console.log(error);
383 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500384 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600385 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500386 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600387 hostPowerOff: function(){
388 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500389 $http({
390 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500391 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500392 headers: {
393 'Accept': 'application/json',
394 'Content-Type': 'application/json'
395 },
396 withCredentials: true,
397 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700398 }).then(function(response){
399 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500400 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600401 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700402 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600403 console.log(error);
404 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500405 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600406 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500407 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600408 hostReboot: function(){
409 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500410 $http({
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600411 method: 'PUT',
412 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500413 headers: {
414 'Accept': 'application/json',
415 'Content-Type': 'application/json'
416 },
417 withCredentials: true,
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600418 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700419 }).then(function(response){
420 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500421 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600422 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700423 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600424 console.log(error);
425 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500426 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600427
428 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500429 },
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
534 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500535 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
536
Gunnar Millseedefd32018-02-28 17:02:34 -0600537 if(reading.hasOwnProperty('CriticalLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500538 reading.Value < reading.CriticalLow
539 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500540 severityFlags.critical = true;
541 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500542 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600543 }else if(reading.hasOwnProperty('CriticalHigh') &&
544 reading.Value > reading.CriticalHigh
Iftekharul Islam8947e702017-07-27 10:28:07 -0500545 ){
546 severityFlags.critical = true;
547 severityText = 'critical';
548 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600549 }else if(reading.hasOwnProperty('CriticalLow') &&
550 reading.hasOwnProperty('WarningLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500551 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500552 severityFlags.warning = true;
553 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500554 order = 1;
Gunnar Millseedefd32018-02-28 17:02:34 -0600555 }else if(reading.hasOwnProperty('WarningHigh') &&
556 reading.hasOwnProperty('CriticalHigh') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500557 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
558 severityFlags.warning = true;
559 severityText = 'warning';
560 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500561 }else{
562 severityFlags.normal = true;
563 severityText = 'normal';
564 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500565 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500566 }
567
568 for(var key in content.data){
569 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500570
571 severity = getSensorStatus(content.data[key]);
572
573 if(!content.data[key].hasOwnProperty('CriticalLow')){
574 content.data[key].CriticalLow = "--";
575 content.data[key].CriticalHigh = "--";
576 }
577
578 if(!content.data[key].hasOwnProperty('WarningLow')){
579 content.data[key].WarningLow = "--";
580 content.data[key].WarningHigh = "--";
581 }
582
583 tempKeyParts = key.split("/");
584 title = tempKeyParts.pop();
585 title = tempKeyParts.pop() + '_' + title;
586 title = title.split("_").map(function(item){
587 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
588 }).reduce(function(prev, el){
589 return prev + " " + el;
590 });
591
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500592 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
Gunnar Mills022f5642018-02-07 14:30:17 -0600593 content.data[key].CriticalLow = getScaledValue(content.data[key].CriticalLow, content.data[key].Scale);
594 content.data[key].CriticalHigh = getScaledValue(content.data[key].CriticalHigh, content.data[key].Scale);
595 content.data[key].WarningLow = getScaledValue(content.data[key].WarningLow, content.data[key].Scale);
596 content.data[key].WarningHigh = getScaledValue(content.data[key].WarningHigh, content.data[key].Scale);
Iftekharul Islam8a122842017-09-11 10:58:16 -0500597 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
598 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
599 }else{
600 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
601 }
602
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500603 sensorData.push(Object.assign({
604 path: key,
605 selected: false,
606 confirm: false,
607 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500608 title: title,
609 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
610 severity_flags: severity.flags,
611 status: severity.severityText,
612 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500613 custom_order: customOrder,
Gunnar Millseedefd32018-02-28 17:02:34 -0600614 search_text: (title + " " + content.data[key].Value + " " +
615 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
616 severity.severityText + " " +
Iftekharul Islam8947e702017-07-27 10:28:07 -0500617 content.data[key].CriticalLow + " " +
618 content.data[key].CriticalHigh + " " +
619 content.data[key].WarningLow + " " +
620 content.data[key].WarningHigh + " "
621 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500622 original_data: {key: key, value: content.data[key]}
623 }, content.data[key]));
624 }
625 }
626
Iftekharul Islam8947e702017-07-27 10:28:07 -0500627 callback(sensorData, dataClone);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700628 }, function(error){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500629 console.log(error);
630 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500631 },
Gunnar Mills033025f2018-03-06 14:49:40 -0600632 getActivation: function(imageId){
633 return $http({
634 method: 'GET',
635 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Activation",
636 headers: {
637 'Accept': 'application/json',
638 'Content-Type': 'application/json'
639 },
640 withCredentials: true
641 }).then(function(response){
642 return response.data;
643 });
644 },
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){
Gunnar Mills87c3db62018-04-13 16:14:41 -0500817 return $http({
Iftekharul Islam2a489552017-11-02 13:23:08 -0500818 method: 'POST',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500819 timeout: 5 * 60 * 1000,
Gunnar Millsdddb1492018-02-19 16:27:27 -0600820 url: DataService.getHost() + "/upload/image",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500821 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500822 'Content-Type': 'application/octet-stream'
Iftekharul Islamc0161392017-06-14 15:46:15 -0500823 },
824 withCredentials: true,
825 data: file
Ed Tanousbbcf6702017-10-06 13:53:06 -0700826 }).then(function(response){
Gunnar Mills87c3db62018-04-13 16:14:41 -0500827 return response.data;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500828 });
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500829 },
830 downloadImage: function(host, filename){
Gunnar Mills36379b92018-04-02 16:53:53 -0500831 return $http({
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500832 method: 'POST',
Gunnar Millse345cac2018-02-20 11:16:53 -0600833 url: DataService.getHost() + "/xyz/openbmc_project/software/action/DownloadViaTFTP",
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500834 headers: {
Gunnar Mills36379b92018-04-02 16:53:53 -0500835 'Accept': 'application/json',
836 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500837 },
838 withCredentials: true,
Gunnar Millse345cac2018-02-20 11:16:53 -0600839 data: JSON.stringify({"data": [filename, host]}),
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500840 responseType: 'arraybuffer'
Gunnar Mills36379b92018-04-02 16:53:53 -0500841 }).then(function(response){
842 return response.data;
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500843 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500844 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500845 getBMCEthernetInfo: function(){
846 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500847 $http({
848 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500849 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500850 headers: {
851 'Accept': 'application/json',
852 'Content-Type': 'application/json'
853 },
854 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700855 }).then(function(response){
856 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500857 var content = JSON.parse(json);
858 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700859 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500860 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500861 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500862 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500863
864 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500865 },
866 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500867 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500868 $http({
869 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500870 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500871 headers: {
872 'Accept': 'application/json',
873 'Content-Type': 'application/json'
874 },
875 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700876 }).then(function(response){
877 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500878 var content = JSON.parse(json);
879 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700880 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500881 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500882 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500883 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500884 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500885 },
Gunnar Mills17708f22018-04-13 14:21:31 -0500886 getServerInfo: function(){
Gunnar Mills5ea75752018-04-19 16:07:10 -0500887 // TODO: openbmc/openbmc#3117 Need a way via REST to get
888 // interfaces so we can get the system object(s) by the looking
889 // for the system interface.
Gunnar Mills17708f22018-04-13 14:21:31 -0500890 return $http({
891 method: 'GET',
892 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system",
893 headers: {
894 'Accept': 'application/json',
895 'Content-Type': 'application/json'
896 },
897 withCredentials: true
898 }).then(function(response){
899 return response.data;
900 });
901 },
Gunnar Millsed96f8b2018-04-19 15:33:40 -0500902 getBMCTime: function(){
903 return $http({
904 method: 'GET',
905 url: DataService.getHost() + "/xyz/openbmc_project/time/bmc",
906 headers: {
907 'Accept': 'application/json',
908 'Content-Type': 'application/json'
909 },
910 withCredentials: true
911 }).then(function(response){
912 return response.data;
913 });
914 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500915 getHardwares: function(callback){
916 $http({
917 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500918 url: DataService.getHost() + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500919 headers: {
920 'Accept': 'application/json',
921 'Content-Type': 'application/json'
922 },
923 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700924 }).then(function(response){
925 var json = JSON.stringify(response.data);
Iftekharul Islamee27d752017-07-05 15:54:31 -0500926 var content = JSON.parse(json);
927 var hardwareData = [];
928 var keyIndexMap = {};
929 var title = "";
930 var data = [];
931 var searchText = "";
932 var componentIndex = -1;
933 var tempParts = [];
934
935
936 function isSubComponent(key){
937
938 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
939 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
940 }
941
942 return false;
943 }
944
945 function titlelize(title){
946 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
947 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
948 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
949 return title.toUpperCase();
950 }
951 }
952
953 return title;
954 }
955
956 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500957 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500958 for(var key in obj){
959 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
960 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500961 value = obj[key];
962 if(value == 1 || value == 0){
963 value = (value == 1) ? 'Yes' : 'No';
964 }
965 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500966 }
967 }
968
969 return transformed;
970 }
971
972 function getSearchText(data){
973 var searchText = "";
974 for(var i = 0; i < data.length; i++){
975 searchText += " " + data[i].key + " " + data[i].value;
976 }
977
Gunnar Millseedefd32018-02-28 17:02:34 -0600978 return searchText;
Iftekharul Islamee27d752017-07-05 15:54:31 -0500979 }
980
981 for(var key in content.data){
Gunnar Millseedefd32018-02-28 17:02:34 -0600982 if(content.data.hasOwnProperty(key) &&
Iftekharul Islamee27d752017-07-05 15:54:31 -0500983 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
984
985 data = camelcaseToLabel(content.data[key]);
986 searchText = getSearchText(data);
987 title = key.split("/").pop();
988
989 title = titlelize(title);
990
991 if(!isSubComponent(key)){
992 hardwareData.push(Object.assign({
993 path: key,
994 title: title,
995 selected: false,
996 expanded: false,
997 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
Gunnar Millseedefd32018-02-28 17:02:34 -0600998 sub_components: [],
Iftekharul Islamee27d752017-07-05 15:54:31 -0500999 original_data: {key: key, value: content.data[key]}
1000 }, {items: data}));
1001
1002 keyIndexMap[key] = hardwareData.length - 1;
1003 }else{
1004 var tempParts = key.split("/");
1005 tempParts.pop();
1006 tempParts = tempParts.join("/");
1007 componentIndex = keyIndexMap[tempParts];
1008 data = content.data[key];
1009 data.title = title;
1010 hardwareData[componentIndex].sub_components.push(data);
1011 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
Gunnar Millscdd9d6b2018-03-09 11:57:06 -06001012
1013 // Sort the subcomponents alphanumeric so they are displayed on the
1014 // inventory page in order (e.g. core 0, core 1, core 2, ... core 12, core 13)
1015 hardwareData[componentIndex].sub_components.sort(function (a, b) {
1016 return a.title.localeCompare(b.title, 'en', { numeric: true });
1017 });
Iftekharul Islamee27d752017-07-05 15:54:31 -05001018 }
1019 }
1020 }
1021
1022 if(callback){
1023 callback(hardwareData, content.data);
1024 }else{
1025 return { data: hardwareData, original_data: content.data};
1026 }
1027 });
1028 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001029 deleteLogs: function(logs) {
1030 var defer = $q.defer();
1031 var promises = [];
1032
1033 function finished(){
1034 defer.resolve();
1035 }
1036
1037 logs.forEach(function(item){
1038 promises.push($http({
1039 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001040 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001041 headers: {
1042 'Accept': 'application/json',
1043 'Content-Type': 'application/json'
1044 },
1045 withCredentials: true,
1046 data: JSON.stringify({"data": []})
1047 }));
1048 });
1049
1050 $q.all(promises).then(finished);
1051
1052 return defer.promise;
1053 },
1054 resolveLogs: function(logs) {
1055 var defer = $q.defer();
1056 var promises = [];
1057
1058 function finished(){
1059 defer.resolve();
1060 }
1061
1062 logs.forEach(function(item){
1063 promises.push($http({
1064 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001065 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001066 headers: {
1067 'Accept': 'application/json',
1068 'Content-Type': 'application/json'
1069 },
1070 withCredentials: true,
1071 data: JSON.stringify({"data": "1"})
1072 }));
1073 });
1074
1075 $q.all(promises).then(finished);
1076
1077 return defer.promise;
1078 },
CamVan Nguyen33275832018-03-13 18:38:37 -05001079 getPowerConsumption: function(){
1080 return $http({
1081 method: 'GET',
1082 url: DataService.getHost() + "/xyz/openbmc_project/sensors/power/total_power",
1083 headers: {
1084 'Accept': 'application/json',
1085 'Content-Type': 'application/json'
1086 },
1087 withCredentials: true
1088 }).then(function(response){
1089 var json = JSON.stringify(response.data);
1090 var content = JSON.parse(json);
1091
1092 return getScaledValue(content.data.Value,
1093 content.data.Scale) + ' ' +
1094 Constants.POWER_CONSUMPTION_TEXT[content.data.Unit];
1095 }, function(error){
1096 if ('Not Found' == error.statusText) {
1097 return Constants.POWER_CONSUMPTION_TEXT.notavailable;
1098 } else {
CamVan Nguyen7db0e9a2018-05-04 19:30:01 -05001099 throw error;
CamVan Nguyen33275832018-03-13 18:38:37 -05001100 }
1101 });
1102 },
1103 getPowerCap: function(){
1104 return $http({
1105 method: 'GET',
1106 url: DataService.getHost() + "/xyz/openbmc_project/control/host0/power_cap",
1107 headers: {
1108 'Accept': 'application/json',
1109 'Content-Type': 'application/json'
1110 },
1111 withCredentials: true
1112 }).then(function(response){
1113 var json = JSON.stringify(response.data);
1114 var content = JSON.parse(json);
1115
1116 return (false == content.data.PowerCapEnable) ?
1117 Constants.POWER_CAP_TEXT.disabled :
1118 content.data.PowerCap + ' ' + Constants.POWER_CAP_TEXT.unit;
CamVan Nguyen33275832018-03-13 18:38:37 -05001119 });
1120 },
Andrew Geisslere672c7c2018-05-03 12:56:15 -07001121 setHostname: function(hostname){
1122 return $http({
1123 method: 'PUT',
1124 url: DataService.getHost() + "/xyz/openbmc_project/network/config/attr/HostName",
1125 headers: {
1126 'Accept': 'application/json',
1127 'Content-Type': 'application/json'
1128 },
1129 withCredentials: true,
1130 data: JSON.stringify({"data": hostname})
1131 }).then(function(response){
1132 return response.data;
1133 });
1134 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001135 };
1136 return SERVICE;
1137 }]);
1138
1139 })(window.angular);