github.com/optim-corp/cios-golang-sdk@v0.5.1/sdk/service/device/asset.go (about) 1 package srvdevice 2 3 import ( 4 _nethttp "net/http" 5 6 ciosctx "github.com/optim-corp/cios-golang-sdk/ctx" 7 8 cnv "github.com/fcfcqloow/go-advance/convert" 9 xmath "github.com/fcfcqloow/go-advance/math" 10 "github.com/optim-corp/cios-golang-sdk/cios" 11 "github.com/optim-corp/cios-golang-sdk/util" 12 ) 13 14 func MakeGetModelsOpts() cios.ApiGetDeviceModelsRequest { 15 return cios.ApiGetDeviceModelsRequest{} 16 } 17 func MakeGetEntitiesOpts() cios.ApiGetDeviceEntitiesRequest { 18 return cios.ApiGetDeviceEntitiesRequest{} 19 } 20 21 func MakeGetLifecyclesOpts() cios.ApiGetDeviceEntitiesLifecyclesRequest { 22 return cios.ApiGetDeviceEntitiesLifecyclesRequest{} 23 } 24 25 func (self *CiosDeviceAssetManagement) GetModels(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceModelsRequest) (response cios.MultipleDeviceModel, httpResponse *_nethttp.Response, err error) { 26 if err := self.refresh(); err != nil { 27 return cios.MultipleDeviceModel{}, nil, err 28 } 29 params.ApiService = self.ApiClient.DeviceAssetApi 30 params.Ctx = self.withHost(ctx) 31 params.P_order = util.ToNil(params.P_order) 32 params.P_orderBy = util.ToNil(params.P_orderBy) 33 params.P_name = util.ToNil(params.P_name) 34 params.P_componentKey = util.ToNil(params.P_componentKey) 35 params.P_endEventAt = util.ToNil(params.P_endEventAt) 36 params.P_componentValue = util.ToNil(params.P_componentValue) 37 params.P_resourceOwnerId = util.ToNil(params.P_resourceOwnerId) 38 params.P_version = util.ToNil(params.P_version) 39 return params.Execute() 40 } 41 func (self *CiosDeviceAssetManagement) GetModelsAll(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceModelsRequest) ([]cios.DeviceModel, *_nethttp.Response, error) { 42 var ( 43 result []cios.DeviceModel 44 httpRes *_nethttp.Response 45 err error 46 _limit = int64(1000) 47 offset = int64(0) 48 getFunction = func(offset int64) (cios.MultipleDeviceModel, *_nethttp.Response, error) { 49 return self.GetModels(ctx, params.Limit(xmath.MinInt64(_limit, 1000)).Offset(offset+cnv.MustInt64(params.P_offset))) 50 } 51 ) 52 if params.P_limit != nil { 53 _limit = *params.P_limit 54 for { 55 res, httpRes, err := getFunction(offset) 56 if err != nil { 57 return nil, httpRes, err 58 } 59 result = append(result, res.Models...) 60 offset += 1000 61 _limit -= 1000 62 if _limit <= 0 { 63 break 64 } 65 } 66 } else { 67 res, httpRes, err := getFunction(offset) 68 if err != nil { 69 return nil, httpRes, err 70 } 71 result = append(result, res.Models...) 72 for offset = int64(1000); offset < res.Total; offset += 1000 { 73 res, httpRes, err = getFunction(offset) 74 if err != nil { 75 return nil, httpRes, err 76 } 77 result = append(result, res.Models...) 78 } 79 } 80 return result, httpRes, err 81 } 82 func (self *CiosDeviceAssetManagement) GetModelsUnlimited(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceModelsRequest) ([]cios.DeviceModel, *_nethttp.Response, error) { 83 params.P_limit = nil 84 return self.GetModelsAll(ctx, params) 85 } 86 func (self *CiosDeviceAssetManagement) GetModelsMapByID(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceModelsRequest) (map[string]cios.DeviceModel, error) { 87 models, _, err := self.GetModelsUnlimited(ctx, params) 88 if err != nil { 89 return nil, err 90 } 91 m := map[string]cios.DeviceModel{} 92 for _, deviceModel := range models { 93 m[deviceModel.Id] = deviceModel 94 } 95 return m, nil 96 } 97 func (self *CiosDeviceAssetManagement) GetModel(ctx ciosctx.RequestCtx, name string) (cios.DeviceModel, *_nethttp.Response, error) { 98 if err := self.refresh(); err != nil { 99 return cios.DeviceModel{}, nil, err 100 } 101 response, httpResponse, err := self.ApiClient.DeviceAssetApi.GetDeviceModel(self.withHost(ctx), name).Execute() 102 if err != nil { 103 return cios.DeviceModel{}, httpResponse, err 104 } 105 return response.Model, httpResponse, err 106 } 107 func (self *CiosDeviceAssetManagement) CreateModel(ctx ciosctx.RequestCtx, body cios.DeviceModelRequest) (cios.DeviceModel, *_nethttp.Response, error) { 108 if err := self.refresh(); err != nil { 109 return cios.DeviceModel{}, nil, err 110 } 111 response, httpResponse, err := self.ApiClient.DeviceAssetApi.CreateDeviceModel(self.withHost(ctx)).DeviceModelRequest(body).Execute() 112 if err != nil { 113 return cios.DeviceModel{}, httpResponse, err 114 } 115 return response.Model, httpResponse, err 116 } 117 func (self *CiosDeviceAssetManagement) DeleteModel(ctx ciosctx.RequestCtx, name string) (*_nethttp.Response, error) { 118 if err := self.refresh(); err != nil { 119 return nil, err 120 } 121 return self.ApiClient.DeviceAssetApi.DeleteDeviceModel(self.withHost(ctx), name).Execute() 122 } 123 124 func (self *CiosDeviceAssetManagement) GetEntities(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceEntitiesRequest) (response cios.MultipleDeviceModelEntity, httpResponse *_nethttp.Response, err error) { 125 if err = self.refresh(); err != nil { 126 return 127 } 128 params.Ctx = self.withHost(ctx) 129 params.ApiService = self.ApiClient.DeviceAssetApi 130 params.P_order = util.ToNil(params.P_order) 131 params.P_orderBy = util.ToNil(params.P_orderBy) 132 params.P_key = util.ToNil(params.P_key) 133 params.P_componentKey = util.ToNil(params.P_componentKey) 134 params.P_serialNumber = util.ToNil(params.P_serialNumber) 135 params.P_componentValue = util.ToNil(params.P_componentValue) 136 params.P_resourceOwnerId = util.ToNil(params.P_resourceOwnerId) 137 params.P_deviceId = util.ToNil(params.P_deviceId) 138 return params.Execute() 139 } 140 func (self *CiosDeviceAssetManagement) GetEntitiesAll(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceEntitiesRequest) ([]cios.DeviceModelsEntity, *_nethttp.Response, error) { 141 var ( 142 result []cios.DeviceModelsEntity 143 httpRes *_nethttp.Response 144 err error 145 _limit = int64(1000) 146 offset = int64(0) 147 getFunction = func(offset int64) (cios.MultipleDeviceModelEntity, *_nethttp.Response, error) { 148 return self.GetEntities(ctx, params.Limit(xmath.MinInt64(_limit, 1000)).Offset(offset+cnv.MustInt64(params.P_offset))) 149 } 150 ) 151 if params.P_limit != nil { 152 _limit = *params.P_limit 153 for { 154 res, httpRes, err := getFunction(offset) 155 if err != nil { 156 return nil, httpRes, err 157 } 158 result = append(result, res.Entities...) 159 offset += 1000 160 _limit -= 1000 161 if _limit <= 0 { 162 break 163 } 164 } 165 } else { 166 res, httpRes, err := getFunction(offset) 167 if err != nil { 168 return nil, httpRes, err 169 } 170 result = append(result, res.Entities...) 171 for offset = int64(1000); offset < res.Total; offset += 1000 { 172 res, httpRes, err = getFunction(offset) 173 if err != nil { 174 return nil, httpRes, err 175 } 176 result = append(result, res.Entities...) 177 } 178 } 179 return result, httpRes, err 180 } 181 func (self *CiosDeviceAssetManagement) GetEntitiesUnlimited(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceEntitiesRequest) ([]cios.DeviceModelsEntity, *_nethttp.Response, error) { 182 params.P_limit = nil 183 return self.GetEntitiesAll(ctx, params) 184 } 185 func (self *CiosDeviceAssetManagement) GetEntitiesMapByID(ctx ciosctx.RequestCtx, params cios.ApiGetDeviceEntitiesRequest) (map[string]cios.DeviceModelsEntity, error) { 186 devices, _, err := self.GetEntitiesUnlimited(ctx, params) 187 if err != nil { 188 return nil, err 189 } 190 m := map[string]cios.DeviceModelsEntity{} 191 for _, entity := range devices { 192 m[entity.Id] = entity 193 } 194 return m, nil 195 } 196 func (self *CiosDeviceAssetManagement) GetEntity(ctx ciosctx.RequestCtx, key string) (cios.DeviceModelsEntity, *_nethttp.Response, error) { 197 if err := self.refresh(); err != nil { 198 return cios.DeviceModelsEntity{}, nil, err 199 } 200 response, httpResponse, err := self.ApiClient.DeviceAssetApi.GetDeviceEntity(self.withHost(ctx), key).Execute() 201 if err != nil { 202 return cios.DeviceModelsEntity{}, httpResponse, err 203 } 204 return response.Entity, httpResponse, err 205 } 206 func (self *CiosDeviceAssetManagement) DeleteEntity(ctx ciosctx.RequestCtx, key string) (*_nethttp.Response, error) { 207 if err := self.refresh(); err != nil { 208 return nil, err 209 } 210 return self.ApiClient.DeviceAssetApi.DeleteDeviceEntity(self.withHost(ctx), key).Execute() 211 } 212 func (self *CiosDeviceAssetManagement) CreateEntity(ctx ciosctx.RequestCtx, name string, body cios.Inventory) (cios.DeviceModelsEntity, *_nethttp.Response, error) { 213 if err := self.refresh(); err != nil { 214 return cios.DeviceModelsEntity{}, nil, err 215 } 216 response, httpResponse, err := self.ApiClient.DeviceAssetApi.CreateInventory(self.withHost(ctx), name).Inventory(body).Execute() 217 if err != nil { 218 return cios.DeviceModelsEntity{}, httpResponse, err 219 } 220 return response.Entity, httpResponse, err 221 } 222 223 func (self *CiosDeviceAssetManagement) GetLifecycles(ctx ciosctx.RequestCtx, key string, params cios.ApiGetDeviceEntitiesLifecyclesRequest) (response cios.MultipleLifeCycle, httpResponse *_nethttp.Response, err error) { 224 if err := self.refresh(); err != nil { 225 return cios.MultipleLifeCycle{}, nil, err 226 } 227 params.ApiService = self.ApiClient.DeviceAssetApi 228 params.P_key = key 229 params.Ctx = self.withHost(ctx) 230 params.P_order = util.ToNil(params.P_order) 231 params.P_orderBy = util.ToNil(params.P_orderBy) 232 params.P_afterId = util.ToNil(params.P_afterId) 233 params.P_beforeId = util.ToNil(params.P_beforeId) 234 params.P_componentId = util.ToNil(params.P_componentId) 235 params.P_eventKind = util.ToNil(params.P_eventKind) 236 params.P_eventMode = util.ToNil(params.P_eventMode) 237 params.P_eventType = util.ToNil(params.P_eventType) 238 params.P_endEventAt = util.ToNil(params.P_endEventAt) 239 params.P_startEventAt = util.ToNil(params.P_startEventAt) 240 return params.Execute() 241 } 242 func (self *CiosDeviceAssetManagement) GetLifecyclesAll(ctx ciosctx.RequestCtx, key string, params cios.ApiGetDeviceEntitiesLifecyclesRequest) ([]cios.LifeCycle, *_nethttp.Response, error) { 243 var ( 244 httpResponse *_nethttp.Response 245 err error 246 result []cios.LifeCycle 247 _limit = int64(1000) 248 offset = int64(0) 249 getFunction = func(offset int64) (cios.MultipleLifeCycle, *_nethttp.Response, error) { 250 return self.GetLifecycles(ctx, key, params.Limit(xmath.MinInt64(_limit, 1000)).Offset(offset+cnv.MustInt64(params.P_offset))) 251 } 252 ) 253 if params.P_limit != nil { 254 _limit = *params.P_limit 255 for { 256 res, httpRes, err := getFunction(offset) 257 if err != nil { 258 return nil, httpRes, err 259 } 260 result = append(result, res.Lifecycles...) 261 offset += 1000 262 _limit -= 1000 263 if _limit <= 0 { 264 break 265 } 266 } 267 } else { 268 res, httpRes, err := getFunction(offset) 269 if err != nil { 270 return nil, httpRes, err 271 } 272 result = append(result, res.Lifecycles...) 273 for offset = int64(1000); offset+cnv.MustInt64(params.P_offset) < res.Total; offset += 1000 { 274 res, httpRes, err = getFunction(offset) 275 if err != nil { 276 return nil, httpRes, err 277 } 278 result = append(result, res.Lifecycles...) 279 } 280 } 281 return result, httpResponse, err 282 } 283 func (self *CiosDeviceAssetManagement) GetLifecyclesUnlimitedByEntities(ctx ciosctx.RequestCtx, entities []cios.DeviceModelsEntity, params cios.ApiGetDeviceEntitiesLifecyclesRequest) ([][]cios.LifeCycle, *_nethttp.Response, error) { 284 var allLifecycles [][]cios.LifeCycle 285 for _, modelEntity := range entities { 286 lifecycles, httpResponse, err := self.GetLifecyclesUnlimited(ctx, modelEntity.Key, params) 287 if err != nil { 288 return nil, httpResponse, err 289 } 290 allLifecycles = append(allLifecycles, lifecycles) 291 } 292 return allLifecycles, nil, nil 293 } 294 func (self *CiosDeviceAssetManagement) GetLifecyclesUnlimited(ctx ciosctx.RequestCtx, key string, params cios.ApiGetDeviceEntitiesLifecyclesRequest) ([]cios.LifeCycle, *_nethttp.Response, error) { 295 params.P_limit = nil 296 return self.GetLifecyclesAll(ctx, key, params) 297 } 298 func (self *CiosDeviceAssetManagement) GetLifecycle(ctx ciosctx.RequestCtx, key, id string) (cios.LifeCycle, *_nethttp.Response, error) { 299 if err := self.refresh(); err != nil { 300 return cios.LifeCycle{}, nil, err 301 } 302 response, httpResponse, err := self.ApiClient.DeviceAssetApi.GetDeviceEntitiesLifecycle(self.withHost(ctx), key, id).Execute() 303 if err != nil { 304 return cios.LifeCycle{}, nil, err 305 } 306 return response.Lifecycle, httpResponse, err 307 } 308 func (self *CiosDeviceAssetManagement) CreateLifecycle(ctx ciosctx.RequestCtx, key string, body cios.LifeCycleRequest) (cios.LifeCycle, *_nethttp.Response, error) { 309 if err := self.refresh(); err != nil { 310 return cios.LifeCycle{}, nil, err 311 } 312 response, httpResponse, err := self.ApiClient.DeviceAssetApi.CreateDeviceEntitiesLifecycle(self.withHost(ctx), key).LifeCycleRequest(body).Execute() 313 if err != nil { 314 return cios.LifeCycle{}, nil, err 315 } 316 return response.Lifecycle, httpResponse, err 317 } 318 func (self *CiosDeviceAssetManagement) DeleteLifecycle(ctx ciosctx.RequestCtx, key string, id string) (*_nethttp.Response, error) { 319 if err := self.refresh(); err != nil { 320 return nil, err 321 } 322 return self.ApiClient.DeviceAssetApi.DeleteDeviceEntitiesLifecycle(self.withHost(ctx), key, id).Execute() 323 } 324 325 type DeviceEntitiesComponentRange struct { 326 StartDeviceEntitiesComponent cios.DeviceEntitiesComponent 327 EndDeviceEntitiesComponent cios.DeviceEntitiesComponent 328 StartEventAt string 329 EndEventAt string 330 } 331 332 func ToBetweenLifecycle(lifecycles cios.LifeCycleStream) (result [][]DeviceEntitiesComponentRange) { 333 streams := lifecycles. 334 Sort(func(i, j int) bool { return lifecycles.Get(i).EventAt < lifecycles.Get(j).EventAt }). 335 GroupBy(func(cycle cios.LifeCycle, _ int) string { return cnv.MustStr(cycle.AfterId) }) 336 for _, cycles := range streams { 337 result = append(result, toBetweenLifecycle(cycles)) 338 } 339 return 340 } 341 func toBetweenLifecycle(lifecycles cios.LifeCycleStream) (result []DeviceEntitiesComponentRange) { 342 length := len(lifecycles) 343 if length < 1 { 344 return 345 } 346 result = append(result, toDeviceEntitiesComponentRange(nil, &lifecycles[0])) 347 for i := 0; i < length-1; i++ { 348 result = append(result, toDeviceEntitiesComponentRange(&lifecycles[i], &lifecycles[i+1])) 349 } 350 result = append(result, toDeviceEntitiesComponentRange(&lifecycles[length-1], nil)) 351 return 352 } 353 func toDeviceEntitiesComponentRange(start *cios.LifeCycle, end *cios.LifeCycle) DeviceEntitiesComponentRange { 354 if start != nil && end == nil && start.AfterComponent.IsSet() { 355 return DeviceEntitiesComponentRange{ 356 StartDeviceEntitiesComponent: *start.AfterComponent.Get(), 357 StartEventAt: start.EventAt, 358 } 359 } 360 if start != nil && end != nil && start.AfterComponent.IsSet() && end.BeforeComponent.IsSet() { 361 return DeviceEntitiesComponentRange{ 362 StartDeviceEntitiesComponent: *start.AfterComponent.Get(), 363 EndDeviceEntitiesComponent: *end.BeforeComponent.Get(), 364 StartEventAt: start.EventAt, 365 EndEventAt: end.EventAt, 366 } 367 } 368 if start == nil && end != nil && end.BeforeComponent.IsSet() { 369 return DeviceEntitiesComponentRange{ 370 EndDeviceEntitiesComponent: *end.BeforeComponent.Get(), 371 EndEventAt: end.EventAt, 372 } 373 } 374 return DeviceEntitiesComponentRange{} 375 } 376 func CreateParentPartsMap(entities []cios.DeviceModelsEntity) map[string]string { 377 var ( 378 dig func(n cios.DeviceEntitiesComponent) 379 parentPartsMap = map[string]string{} 380 ) 381 dig = func(entity cios.DeviceEntitiesComponent) { 382 if entity.Components != nil { 383 for _, ent := range *entity.Components { 384 if ent.DisplayInfo != nil { 385 for _, display := range *ent.DisplayInfo { 386 if display.Language == "en" { 387 parentPartsMap[ent.Id] = display.Name 388 } 389 } 390 } 391 dig(ent) 392 } 393 } 394 } 395 cios. 396 GenerateDeviceModelsEntityStream(entities). 397 ForEach(func(device cios.DeviceModelsEntity, _ int) { 398 if device.Components.IsSet() { 399 dig(*device.Components.Get()) 400 } 401 }) 402 return parentPartsMap 403 }