示例#1
0
        public async Task <List <ServiceOutage> > GenerateServiceOutagesForMonth(DateTime searchMonthYear)
        {
            var refTickets = await _refundSupportTicketRepository.GetRefundSupportTicketsForMonth(searchMonthYear);

            if (refTickets.IsNullOrEmptyCollection())
            {
                return(null);
            }

            var gen = await GenerateServiceOutages(refTickets, true);

            return(gen);
        }
        public async Task <ActionResult <List <RefundSupportTicketDto> > > GetRefundSupportTicketsForMonth([FromBody] DateTime searchMonthYear)
        {
            _logger.LogInformation(ApiLogEvents.InsertItemsList, $"{nameof(GetRefundSupportTicketsForMonth)} Started {searchMonthYear}");

            var repoObj = await _repository.GetRefundSupportTicketsForMonth(searchMonthYear);

            if (repoObj.IsNullOrEmptyCollection())
            {
                return(null);
            }

            var result = _mapper.Map <List <RefundSupportTicketDto> >(repoObj);

            return(Ok(result));
        }
示例#3
0
        public async Task <List <ServiceOutageSummary> > GenerateServiceOutagesSummaryForMonth(DateTime searchMonthYear)
        {
            try
            {
                var refTickets = await _refundSupportTicketRepository.GetRefundSupportTicketsForMonth(searchMonthYear);

                if (refTickets.IsNullOrEmptyCollection())
                {
                    return(null);
                }

                var serviceOutages = await _serviceOutageRepository.GenerateServiceOutagesForMonth(searchMonthYear);

                if (serviceOutages.IsNullOrEmptyCollection())
                {
                    return(null);
                }

                var existingDic = (await _serviceOutageSummaryRepository.GetExisting(searchMonthYear)).ToDictionary(k => k.Service.TrimStart());
                var grouped     = serviceOutages.GroupBy(a => a.Service.TrimStart().TrimEnd()).ToList();
                List <ServiceOutageSummary> listCurrent = new();
                List <ServiceOutageSummary> result      = new();
                List <ServiceOutageSummary> toSave      = new();
                List <ServiceOutageSummary> toUpdate    = new();

                foreach (var serviceGrouped in grouped)
                {
                    var serviceName = serviceGrouped.Key;
                    ServiceOutageSummary serviceOutageSummary = new()
                    {
                        Service      = serviceName,
                        Year         = searchMonthYear.Year,
                        Month        = searchMonthYear.Month,
                        Impact       = "No Impact",
                        CreditReview = true,
                        Occurrence   = serviceGrouped.Count(),
                    };
                    //ServiceOutageSummary serviceOutageSummary = new ServiceOutageSummary(serviceGrouped);
                    HashSet <string> hash = new();
                    StringBuilder    sb   = new();
                    foreach (var ou in serviceGrouped)
                    {
                        var serIss = refTickets.Where(a => a.TrackingId == ou.TrackingId).FirstOrDefault();
                        if (serIss != null)
                        {
                            serIss.ServiceIssue.ImpactedRegions.GetCollectionOfStringsFromTextExt(",").ToList().ForEach(a => hash.Add(a));
                        }
                    }
                    if (hash.HasAnyInCollection())
                    {
                        hash.ToList().ForEach(a => sb.Append($"{a}, "));
                        serviceOutageSummary.Regions = sb.ToString().TrimEnd().TrimEnd(',');
                        sb.Clear();
                        hash.ToList().ForEach(a => sb.Append($"{_supportedRegionsService.GetRegionShortVersion(a)}, "));
                        serviceOutageSummary.RegionsShort = sb.ToString().TrimEnd().TrimEnd(',');
                        sb.Clear();
                    }
                    var mssla = await _serviceSlaService.GetServiceUptime(serviceName);

                    if (mssla.HasValue)//can be empty
                    {
                        serviceOutageSummary.MsSlaUpTimePerc = mssla.Value;
                        double agr = 0;
                        //serviceGrouped.ToList().ForEach(a => agr += (mssla.Value - a.UpTimePercentage)); //bug
                        serviceGrouped.ToList().ForEach(a => agr += (100 - a.UpTimePercentage)); //always take from 100

                        serviceOutageSummary.Deviation = Math.Round(agr, 2, MidpointRounding.AwayFromZero);

                        //serviceOutageSummary.ActualUpTimePerc = serviceOutageSummary.MsSlaUpTimePerc - serviceOutageSummary.Deviation; //always take from 100
                        serviceOutageSummary.ActualUpTimePerc = 100 - serviceOutageSummary.Deviation;
                        if (serviceOutageSummary.ActualUpTimePerc.HasValue)
                        {
                            serviceOutageSummary.ActualUpTimePerc = Math.Round(serviceOutageSummary.ActualUpTimePerc.Value, 2, MidpointRounding.AwayFromZero);
                        }

                        //no need for credit
                        //serviceOutageSummary.ServiceCreditPerc = await _serviceSlaService.EstimatedServiceCreditForService(serviceName, serviceOutageSummary.ActualUpTimePerc.Value);
                    }
                    listCurrent.Add(serviceOutageSummary);
                }

                if (existingDic.HasAnyInCollection())
                {
                    foreach (var sos in listCurrent)
                    {
                        if (!existingDic.TryGetValue(sos.Service, out ServiceOutageSummary old))
                        {
                            toSave.Add(sos);
                            result.Add(sos);
                        }
                        else
                        {
                            var match = (old.Year == sos.Year && old.Month == sos.Month);
                            if (!match)
                            {
                                toSave.Add(sos);
                                result.Add(sos);
                            }
                            else
                            {
                                //update if someting change
                                if (sos.Occurrence != old.Occurrence || sos.MsSlaUpTimePerc != old.MsSlaUpTimePerc || sos.Deviation != old.Deviation)
                                {
                                    old.Occurrence       = sos.Occurrence;
                                    old.ActualUpTimePerc = sos.ActualUpTimePerc;
                                    old.Deviation        = sos.Deviation;
                                    old.MsSlaUpTimePerc  = sos.MsSlaUpTimePerc;
                                    toUpdate.Add(old);
                                }
                                result.Add(old);
                            }
                        }
                    }
                }
                else
                {
                    toSave = listCurrent;
                    result.AddRange(toSave);
                }

                if (toUpdate.HasAnyInCollection())
                {
                    toUpdate.ForEach(a => _serviceOutageSummaryRepository.Update(a));
                    await _serviceOutageSummaryRepository.SaveChangesAsync();
                }
                if (toSave.HasAnyInCollection())
                {
                    toSave.ForEach(a => _serviceOutageSummaryRepository.Add(a));
                    await _serviceOutageSummaryRepository.SaveChangesAsync();

                    //toSave.AddRange(toUpdate);
                    //return toSave.OrderBy(a => a.Service).ToList();
                }
                return(result.OrderBy(a => a.Service).ToList());
            }
            catch (Exception)
            {
                throw;
            }
        }