Example #1
0
        public async Task <IList <IErrorInfo> > Validate(DevicePingLogRequest request)
        {
            this._loggingService.Info("Starting validation for Ping Validator", "PingValidator.Validate");

            if (request == null)
            {
                result.Add(GetValidationResult(
                               ErrorCodes.RequestNull,
                               Utils.GetEnumDescription(ErrorCodes.RequestNull),
                               true,
                               "PingValidator.Validate"));
                return(result);
            }
            else if (request != null && request.AssetUID == Guid.Empty)
            {
                result.Add(GetValidationResult(
                               ErrorCodes.AssetUIDIsNull,
                               Utils.GetEnumDescription(ErrorCodes.AssetUIDIsNull),
                               true,
                               "PingValidator.Validate"));
                return(result);
            }
            else if (request.DeviceUID == Guid.Empty)
            {
                result.Add(GetValidationResult(
                               ErrorCodes.DeviceUIDIsNull,
                               Utils.GetEnumDescription(ErrorCodes.DeviceUIDIsNull),
                               true,
                               "PingValidator.Validate"));
                return(result);
            }
            else
            {
                DeviceTypeFamily deviceTypeFamily = await _devicePingRepository.GetDeviceTypeFamily(request.DeviceUID);

                if (deviceTypeFamily == null || !Constants.PING_ENABLED_DEVICE_TYPE_FAMILIES.ToUpper().Split(',').Contains(deviceTypeFamily.FamilyName.ToUpper()))
                {
                    result.Add(GetValidationResult(
                                   ErrorCodes.DeviceTypeNotSupportedError,
                                   Utils.GetEnumDescription(ErrorCodes.DeviceTypeNotSupportedError),
                                   true,
                                   "PingValidator.Validate"));
                    return(result);
                }

                var validAssetUids = await this._userAssetRepository.FetchValidAssetUIds(new List <string>() { request.AssetUID.ToString() }, new UserAssetDto
                {
                    CustomerUIDString = request.CustomerUID.Value.ToStringWithoutHyphens(),
                    UserUIDString     = request.UserUID.Value.ToStringWithoutHyphens(),
                    TypeName          = deviceTypeFamily.TypeName
                });

                if (validAssetUids.Count() <= 0)
                {
                    result.Add(GetValidationResult(
                                   ErrorCodes.AssetDeviceConfigNotExists,
                                   Utils.GetEnumDescription(ErrorCodes.AssetDeviceConfigNotExists),
                                   true,
                                   "PingValidator.Validate"));
                    return(result);
                }
            }
            this._loggingService.Info("Ended validation for Ping Validator", "PingValidator.Validate");
            return(result);
        }
Example #2
0
        public async Task <DevicePingStatusResponse> PostDevicePingRequest(DevicePingLogRequest request)
        {
            PingRequestStatus        pingRequestStatus = new PingRequestStatus();
            DevicePingStatusResponse response;
            DevicePingLogRequest     validatedRequest = new DevicePingLogRequest();
            Guid devicePingLogUID        = Guid.Empty;
            List <IErrorInfo> errorInfos = new List <IErrorInfo>();

            response = new DevicePingStatusResponse
            {
                AssetUID  = request.AssetUID.ToString(),
                DeviceUID = request.DeviceUID.ToString(),
            };
            errorInfos.AddRange(await base.Validate(this._validators, request));
            errorInfos.AddRange(await this._pingValidator.Validate(request));

            //errorInfos.AddRange(await this.ValidateDuplicateRequest(request));

            var latestRequest = await _devicePingRepository.Fetch(request);

            if (latestRequest != null)
            {
                if (((latestRequest.RequestStatusID == (int)RequestStatus.Pending) || (latestRequest.RequestStatusID == (int)RequestStatus.Acknowledged)) && DateTime.UtcNow <= latestRequest.RequestExpiryTimeUTC)
                {
                    errorInfos.AddRange(new List <IErrorInfo>()
                    {
                        (new ErrorInfo()
                        {
                            Message = Utils.GetEnumDescription(ErrorCodes.DuplicatePingRequest), ErrorCode = (int)ErrorCodes.DuplicatePingRequest
                        })
                    });
                    response.AssetUID             = latestRequest.AssetUID.ToString();
                    response.DeviceUID            = latestRequest.DeviceUID.ToString();
                    response.DevicePingLogUID     = latestRequest.DevicePingLogUID.ToString();
                    response.RequestExpiryTimeUTC = latestRequest.RequestExpiryTimeUTC;
                    response.RequestStatusID      = latestRequest.RequestStatusID;
                    RequestStatus rs = (RequestStatus)latestRequest.RequestStatusID;
                    response.RequestState   = rs.ToString();
                    response.RequestTimeUTC = latestRequest.RequestTimeUTC;
                }
            }

            if (errorInfos.Count <= 0)
            {
                try
                {
                    DeviceTypeFamily deviceTypeFamily = await _devicePingRepository.GetDeviceTypeFamily(request.DeviceUID);

                    if (deviceTypeFamily == null)
                    {
                        errorInfos.Add(new ErrorInfo
                        {
                            ErrorCode = (int)ErrorCodes.DeviceTypeFamilyNotSupported,
                            Message   = Utils.GetEnumDescription(ErrorCodes.DeviceTypeFamilyNotSupported),
                            IsInvalid = true,
                        });
                        response.Errors = errorInfos;
                        return(response);
                    }
                    request.FamilyName = deviceTypeFamily.FamilyName;
                    devicePingLogUID   = _messageConstructor.ProcessMessage(request.AssetUID, request.DeviceUID, deviceTypeFamily.FamilyName);
                    if (devicePingLogUID == Guid.Empty)
                    {
                        errorInfos.Add(new ErrorInfo
                        {
                            ErrorCode = (int)ErrorCodes.UnexpectedError,
                            Message   = Utils.GetEnumDescription(ErrorCodes.UnexpectedError),
                            IsInvalid = true,
                        });
                        response.Errors = errorInfos;
                        return(response);
                    }
                    request.DevicePingLogUID = devicePingLogUID;
                    this._loggingService.Info("Started Invoking DevicePingRepository with request : " + JsonConvert.SerializeObject(request), "DevicePingService.Insert");
                    pingRequestStatus = await this._devicePingRepository.Insert(request);

                    this._loggingService.Info("Ended Invoking DevicePingRepository with response : " + JsonConvert.SerializeObject(pingRequestStatus), "DevicePingService.Insert");
                    response = _mapper.Map <DevicePingStatusResponse>(pingRequestStatus);
                }
                catch (Exception ex)
                {
                    response.Errors.Add(new ErrorInfo
                    {
                        ErrorCode = (int)ErrorCodes.UnexpectedError,
                        Message   = Utils.GetEnumDescription(ErrorCodes.UnexpectedError),
                        IsInvalid = true,
                    });
                    this._loggingService.Error("Exception occurred while saving Ping Request", "PingController.PostDevicePingRequest", ex);
                    throw ex;
                }
            }
            else
            {
                response.Errors = errorInfos;
            }

            return(response);
        }