1/** 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') 14 .factory('APIUtils', ['$http', 'Constants', function($http, Constants){ 15 var SERVICE = { 16 LOGIN_CREDENTIALS: Constants.LOGIN_CREDENTIALS, 17 API_CREDENTIALS: Constants.API_CREDENTIALS, 18 API_RESPONSE: Constants.API_RESPONSE, 19 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE, 20 HOST_STATE_TEXT: Constants.HOST_STATE, 21 HOST_STATE: Constants.HOST_STATE, 22 LED_STATE: Constants.LED_STATE, 23 LED_STATE_TEXT: Constants.LED_STATE_TEXT, 24 getChassisState: function(callback){ 25 $http({ 26 method: 'GET', 27 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/chassis0", 28 headers: { 29 'Accept': 'application/json', 30 'Content-Type': 'application/json' 31 }, 32 withCredentials: true 33 }).success(function(response){ 34 var json = JSON.stringify(response); 35 var content = JSON.parse(json); 36 callback(content.data.CurrentPowerState); 37 }).error(function(error){ 38 console.log(error); 39 }); 40 }, 41 getHostState: function(callback){ 42 $http({ 43 method: 'GET', 44 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0", 45 headers: { 46 'Accept': 'application/json', 47 'Content-Type': 'application/json' 48 }, 49 withCredentials: true 50 }).success(function(response){ 51 var json = JSON.stringify(response); 52 var content = JSON.parse(json); 53 callback(content.data.CurrentHostState); 54 }).error(function(error){ 55 console.log(error); 56 }); 57 }, 58 getLEDState: function(callback){ 59 $http({ 60 method: 'GET', 61 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/led/groups/enclosure_identify", 62 headers: { 63 'Accept': 'application/json', 64 'Content-Type': 'application/json' 65 }, 66 withCredentials: true 67 }).success(function(response){ 68 var json = JSON.stringify(response); 69 var content = JSON.parse(json); 70 callback(content.data.Asserted); 71 }).error(function(error){ 72 console.log(error); 73 }); 74 }, 75 login: function(username, password, callback){ 76 $http({ 77 method: 'POST', 78 url: SERVICE.API_CREDENTIALS.host + "/login", 79 headers: { 80 'Accept': 'application/json', 81 'Content-Type': 'application/json' 82 }, 83 withCredentials: true, 84 data: JSON.stringify({"data": [username, password]}) 85 }).success(function(response){ 86 if(callback){ 87 callback(response); 88 } 89 }).error(function(error){ 90 if(callback){ 91 if(error && error.status && error.status == 'error'){ 92 callback(error); 93 }else{ 94 callback(error, true); 95 } 96 } 97 console.log(error); 98 }); 99 }, 100 logout: function(callback){ 101 $http({ 102 method: 'POST', 103 url: SERVICE.API_CREDENTIALS.host + "/logout", 104 headers: { 105 'Accept': 'application/json', 106 'Content-Type': 'application/json' 107 }, 108 withCredentials: true, 109 data: JSON.stringify({"data": []}) 110 }).success(function(response){ 111 if(callback){ 112 callback(response); 113 } 114 }).error(function(error){ 115 if(callback){ 116 callback(null, error); 117 } 118 console.log(error); 119 }); 120 }, 121 chassisPowerOn: function(callback){ 122 $http({ 123 method: 'POST', 124 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0", 125 headers: { 126 'Accept': 'application/json', 127 'Content-Type': 'application/json' 128 }, 129 withCredentials: true, 130 data: JSON.stringify({"data": []}) 131 }).success(function(response){ 132 var json = JSON.stringify(response); 133 var content = JSON.parse(json); 134 if(callback){ 135 return callback(content.data.CurrentPowerState); 136 } 137 }).error(function(error){ 138 if(callback){ 139 callback(error); 140 }else{ 141 console.log(error); 142 } 143 }); 144 }, 145 chassisPowerOff: function(callback){ 146 $http({ 147 method: 'POST', 148 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0", 149 headers: { 150 'Accept': 'application/json', 151 'Content-Type': 'application/json' 152 }, 153 withCredentials: true, 154 data: JSON.stringify({"data": []}) 155 }).success(function(response){ 156 var json = JSON.stringify(response); 157 var content = JSON.parse(json); 158 if(callback){ 159 return callback(content.data.CurrentPowerState); 160 } 161 }).error(function(error){ 162 if(callback){ 163 callback(error); 164 }else{ 165 console.log(error); 166 } 167 }); 168 }, 169 setLEDState: function(state, callback){ 170 $http({ 171 method: 'PUT', 172 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted", 173 headers: { 174 'Accept': 'application/json', 175 'Content-Type': 'application/json' 176 }, 177 withCredentials: true, 178 data: JSON.stringify({"data": state}) 179 }).success(function(response){ 180 var json = JSON.stringify(response); 181 var content = JSON.parse(json); 182 if(callback){ 183 return callback(content.status); 184 } 185 }).error(function(error){ 186 if(callback){ 187 callback(error); 188 }else{ 189 console.log(error); 190 } 191 }); 192 }, 193 bmcReboot: function(callback){ 194 $http({ 195 method: 'PUT', 196 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition", 197 headers: { 198 'Accept': 'application/json', 199 'Content-Type': 'application/json' 200 }, 201 withCredentials: true, 202 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"}) 203 }).success(function(response){ 204 var json = JSON.stringify(response); 205 var content = JSON.parse(json); 206 if(callback){ 207 return callback(content.status); 208 } 209 }).error(function(error){ 210 if(callback){ 211 callback(error); 212 }else{ 213 console.log(error); 214 } 215 }); 216 }, 217 hostPowerOn: function(callback){ 218 $http({ 219 method: 'PUT', 220 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition", 221 headers: { 222 'Accept': 'application/json', 223 'Content-Type': 'application/json' 224 }, 225 withCredentials: true, 226 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"}) 227 }).success(function(response){ 228 var json = JSON.stringify(response); 229 var content = JSON.parse(json); 230 if(callback){ 231 return callback(content.status); 232 } 233 }).error(function(error){ 234 if(callback){ 235 callback(error); 236 }else{ 237 console.log(error); 238 } 239 }); 240 }, 241 hostPowerOff: function(callback){ 242 $http({ 243 method: 'PUT', 244 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition", 245 headers: { 246 'Accept': 'application/json', 247 'Content-Type': 'application/json' 248 }, 249 withCredentials: true, 250 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"}) 251 }).success(function(response){ 252 var json = JSON.stringify(response); 253 var content = JSON.parse(json); 254 if(callback){ 255 return callback(content.status); 256 } 257 }).error(function(error){ 258 if(callback){ 259 callback(error); 260 }else{ 261 console.log(error); 262 } 263 }); 264 }, 265 hostReboot: function(callback){ 266 $http({ 267 method: 'POST', 268 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0", 269 headers: { 270 'Accept': 'application/json', 271 'Content-Type': 'application/json' 272 }, 273 withCredentials: true, 274 data: JSON.stringify({"data": []}), 275 }).success(function(response){ 276 var json = JSON.stringify(response); 277 var content = JSON.parse(json); 278 if(callback){ 279 return callback(content); 280 } 281 }).error(function(error){ 282 if(callback){ 283 callback(error); 284 }else{ 285 console.log(error); 286 } 287 }); 288 }, 289 hostShutdown: function(callback){ 290 $http({ 291 method: 'POST', 292 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0", 293 headers: { 294 'Accept': 'application/json', 295 'Content-Type': 'application/json' 296 }, 297 withCredentials: true, 298 data: JSON.stringify({"data": []}) 299 }).success(function(response){ 300 var json = JSON.stringify(response); 301 var content = JSON.parse(json); 302 if(callback){ 303 return callback(content); 304 } 305 }).error(function(error){ 306 if(callback){ 307 callback(error); 308 }else{ 309 console.log(error); 310 } 311 }); 312 }, 313 getLogs: function(callback){ 314 $http({ 315 method: 'GET', 316 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/enumerate", 317 headers: { 318 'Accept': 'application/json', 319 'Content-Type': 'application/json' 320 }, 321 withCredentials: true 322 }).success(function(response){ 323 var json = JSON.stringify(response); 324 var content = JSON.parse(json); 325 var dataClone = JSON.parse(JSON.stringify(content.data)); 326 var data = []; 327 var severityCode = ''; 328 var priority = ''; 329 var resolved = false; 330 var relatedItems = []; 331 332 for(var key in content.data){ 333 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){ 334 var severityFlags = {low: false, medium: false, high: false}; 335 severityCode = content.data[key].Severity.split(".").pop(); 336 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode]; 337 severityFlags[priority.toLowerCase()] = true; 338 relatedItems = []; 339 content.data[key].associations.forEach(function(item){ 340 relatedItems.push(item[2]); //@TODO: better way to find the third item? 341 }); 342 343 data.push(Object.assign({ 344 path: key, 345 copied: false, 346 priority: priority, 347 severity_code: severityCode, 348 severity_flags: severityFlags, 349 additional_data: content.data[key].AdditionalData.join("\n"), 350 selected: false, 351 search_text: (severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(), 352 meta: false, 353 confirm: false, 354 related_items: relatedItems, 355 data: {key: key, value: content.data[key]} 356 }, content.data[key])); 357 } 358 } 359 callback(data, dataClone); 360 }).error(function(error){ 361 console.log(error); 362 }); 363 } 364 }; 365 return SERVICE; 366 }]); 367 368 })(window.angular); 369