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  }