Ejemplo n.º 1
0
        public async Task <IActionResult> OnGetAsync(int id)
        {
            UsageRecord = await _context.UsageRecords
                          .AsNoTracking()
                          .Include(m => m.Project)
                          .ThenInclude(p => p.Group)
                          .FirstOrDefaultAsync(m => m.Id == id);

            if (UsageRecord == null)
            {
                return(NotFound());
            }

            var isAuthorized = await _authorizationService.AuthorizeAsync(User, UsageRecord, Operations.Update);

            if (!isAuthorized.Succeeded)
            {
                return(Forbid());
            }

            AuditTrailLogs = await _context.AuditTrailLogs
                             .AsNoTracking()
                             .Where(l => l.EntityName == UsageRecord.GetType().Name&& l.PrimaryKeyValue == id.ToString())
                             .OrderByDescending(l => l.DateChanged)
                             .ToListAsync();

            return(Page());
        }
        public async ValueTask PutAsync(UsageRecord usageRecord)
        {
            _repository.UsageRecords.Update(usageRecord);
            await _repository.SaveChangesAsync();

            await PublishPersisientEventAsync(usageRecord, UsageRecordsChangeEventKind.Update);
        }
Ejemplo n.º 3
0
        public JsonResult GetRecordFromTag(string tagId)
        {
            Tag tag = BusinessManager.Instance.Tags.Find(tagId);

            if (tag != null)
            {
                UsageRecord record = BusinessManager.Instance.UsageRecords.FindAll().LastOrDefault(r => r.Tag.Id == tagId && r.IsDirty);

                if (record != null)
                {
                    record.ExitDateTime = DateTime.Now;
                    record.TotalHours   = (float)(record.ExitDateTime - record.EnterDateTime).TotalHours;
                    record.TotalValue   = BusinessManager.Instance.CalculatePrice(record.Parking.CNPJ, record.EnterDateTime.TimeOfDay, record.ExitDateTime.TimeOfDay);

                    return(Json(new
                    {
                        Success = true,
                        Record = new
                        {
                            EnterTime = record.EnterDateTime.ToString("HH:mm dd/MM/yyyy"),
                            ExitTime = record.ExitDateTime.ToString("HH:mm dd/MM/yyyy"),
                            TotalHours = TimeSpan.FromHours(record.TotalHours).ToString(@"hh\:mm"),
                            TotalValue = record.TotalValue.ToString("####.##")
                        }
                    }));
                }
            }

            return(Json(new { Success = false, Message = "Tag não encontrada" }));
        }
        public void Test_NotSet_GetTestInfo_ReturnNull()
        {
            var usageRecord = new UsageRecord();
            var actual      = usageRecord.GetTestInfo();

            Assert.Null(actual);
        }
        public async ValueTask PostAsync(UsageRecord usageRecord)
        {
            await _repository.UsageRecords.AddAsync(usageRecord);

            await _repository.SaveChangesAsync();

            await PublishPersisientEventAsync(usageRecord, UsageRecordsChangeEventKind.Add);
        }
Ejemplo n.º 6
0
 public UsageRecordInExcel(
     UsageRecord usageRecord,
     ProjectsWebCacheService projectsWebCacheService,
     EquipmentHourlyRatesLocalCacheService equipmentHourlyRatesLocalCacheService
     )
 {
     _usageRecord             = usageRecord;
     _projectsWebCacheService = projectsWebCacheService;
     _equipmentHourlyRatesLocalCacheService = equipmentHourlyRatesLocalCacheService;
 }
        private UsageRecord PingUpdate(uint key, UsageRecord oldValue)
        {
            var now = clock.GetMinutes();
            // Saturating addition
            var oldFrequency = oldValue.GetCurrentFrequency(now, halfLifeMinutes);

            oldValue.frequency = Math.Max(oldFrequency + 1, oldFrequency);

            oldValue.lastRead = now;
            return(oldValue);
        }
Ejemplo n.º 8
0
        private UsageRecord <T> GetRecord([NotNull] T item)
        {
            if (!_records.TryGetValue(item.DefName, out UsageRecord <T> record))
            {
                _records[item.DefName] = record = new UsageRecord <T> {
                    Item = item
                };
            }

            return(record);
        }
 private async ValueTask PublishPersisientEventAsync(UsageRecord usageRecord, UsageRecordsChangeEventKind eventKind)
 {
     if (_bus is not DumyBus)
     {
         await _bus.PubSub.PublishAsync <UsageRecordPersisientEventArgs>(
             new(usageRecord, eventKind))
         .ContinueWith(task => { if (task.IsFaulted && task.Exception != null)
                                 {
                                     throw task.Exception;
                                 }
                       });
     }
 }
        public void Test_UpdateEndTime()
        {
            var endTime     = new DateTime(2020, 11, 01, 18, 00, 00);
            var usageRecord = new UsageRecord()
            {
                EndTime = new DateTime(2020, 11, 01, 17, 0, 0)
            };

            usageRecord.UpdateEndTime(endTime);

            var actual = usageRecord.EndTime;

            Assert.Equal(endTime, actual);
        }
 void MergeRecord(uint key, UsageRecord record)
 {
     usage.AddOrUpdate(key, record, (k, oldValue) =>
     {
         if (oldValue.lastRead > record.lastRead)
         {
             return(oldValue);
         }
         else
         {
             return(record);
         }
     });
 }
Ejemplo n.º 12
0
        public async Task Test_Create()
        {
            using var db = new ApplicationContext(Utilities.TestDbContextOptions());
            var user        = "******";
            var usageRecord = new UsageRecord()
            {
                User = user
            };
            var genericRepository = new GenericRepository <UsageRecord>(db);

            await genericRepository.Create(usageRecord);

            Assert.Equal(1, db.UsageRecords.Count());
            Assert.Equal(user, db.UsageRecords.Single().User);
        }
Ejemplo n.º 13
0
        public async ValueTask <ActionResult> PutAsync(UsageRecord usageRecord)
        {
            if (Validate(usageRecord))
            {
                _ = _elasticSearch.IndexAsync(usageRecord).ConfigureAwait(false);
                _usageRecordsRepository.UsageRecords.Update(usageRecord);
                await _usageRecordsRepository.SaveChangesAsync();

                return(Ok());
            }
            else
            {
                return(BadRequest("Invalid usage record was put"));
            }
        }
Ejemplo n.º 14
0
        public JsonResult GetUsage(string SubscriptionId, DateTime?StartDate = null, DateTime?EndDate = null, string Granularity = "daily", bool ShowDetails = false, int Count = 1000)
        {
            if (!StartDate.HasValue)
            {
                StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
            }

            if (!EndDate.HasValue)
            {
                EndDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            }

            if (resellerService.rateCard.Meters == null)
            {
                resellerService.rateCard = crestService.GetRateCard();
            }

            UsageRecord usage = crestService.GetUsage(SubscriptionId, StartDate.Value, EndDate.Value, Granularity, ShowDetails, Count);

            List <UsageItemViewModel> usageItems = new List <UsageItemViewModel>();

            if (ShowDetails)
            {
                foreach (UsageItem i in usage.items.OrderBy(x => x.meter_category).ThenBy(x => x.meter_sub_category).ThenBy(x => x.meter_name))
                {
                    usageItems.Add(new UsageItemViewModel {
                        item = i, meter = GetMeter(i.meter_id)
                    });
                }
            }
            else
            {
                IEnumerable <IGrouping <string, UsageItem> > query = usage.items.OrderBy(x => x.meter_category).ThenBy(x => x.meter_sub_category).ThenBy(x => x.meter_name).GroupBy(i => i.meter_id, i => i);

                foreach (IGrouping <string, UsageItem> itemGroup in query)
                {
                    UsageItem u = itemGroup.FirstOrDefault();
                    u.quantity         = itemGroup.Sum(x => x.quantity);
                    u.usage_start_time = itemGroup.Min(d => d.usage_start_time);
                    u.usage_end_time   = itemGroup.Max(d => d.usage_end_time);
                    usageItems.Add(new UsageItemViewModel {
                        item = u, meter = GetMeter(itemGroup.Key)
                    });
                }
            }

            return(Json(new { Result = "OK", Records = usageItems, TotalRecordCount = usageItems.Count }));
        }
Ejemplo n.º 15
0
        public void AddOrUpdateRecord(Plate plate, Parking parking, out bool isNew)
        {
            UsageRecord lastRecord = UsageRecords.FindAll()
                                     .Where(r => r.EnterDateTime.Date == DateTime.Now.Date && r.Client.CPF == plate.Client.CPF && r.IsDirty)
                                     .OrderBy(r => r.EnterDateTime)
                                     .LastOrDefault();

            if (lastRecord == null)
            {
                if (!parking.Spaces.Any(s => s.Status == ParkingSpaceState.Free))
                {
                    throw new FullParkingException("Não há mais vagas disponíves nesse estacionamento");
                }

                ParkingSpace space = parking.Spaces.FirstOrDefault(s => s.Status == ParkingSpaceState.Free);

                lastRecord = new UsageRecord()
                {
                    Client        = plate.Client,
                    EnterDateTime = DateTime.Now,
                    ExitDateTime  = DateTime.Now,
                    IsDirty       = true,
                    Parking       = parking,
                    Plate         = plate,
                    SpaceNumber   = space.Number
                };

                space.Status = ParkingSpaceState.Busy;
                ParkingsSpaces.Update(space);
                UsageRecords.Add(lastRecord);
                isNew = true;
            }
            else
            {
                ParkingSpace space = parking.Spaces.FirstOrDefault(s => s.Number == lastRecord.SpaceNumber);

                lastRecord.IsDirty      = false;
                lastRecord.ExitDateTime = DateTime.Now;
                lastRecord.TotalHours   = Convert.ToSingle((lastRecord.ExitDateTime - lastRecord.EnterDateTime).TotalHours);
                lastRecord.TotalValue   = CalculatePrice(parking.CNPJ, lastRecord.EnterDateTime.TimeOfDay, lastRecord.ExitDateTime.TimeOfDay);

                space.Status = ParkingSpaceState.Free;
                ParkingsSpaces.Update(space);
                UsageRecords.Update(lastRecord);
                isNew = false;
            }
        }
Ejemplo n.º 16
0
        public async ValueTask <ActionResult> PostAsync(UsageRecord usageRecord)
        {
            if (Validate(usageRecord))
            {
                await _usageRecordsRepository.UsageRecords.AddAsync(usageRecord);

                // usageRecord doesn't get its id until AddAsync method, this line can't appear before!
                _ = _elasticSearch.IndexAsync(usageRecord).ConfigureAwait(false);
                await _usageRecordsRepository.SaveChangesAsync();

                return(Ok());
            }
            else
            {
                return(BadRequest("Invalid usage record was posted"));
            }
        }
        public void Test_SetAndGetVacuumDegreeInfo()
        {
            var vacuumDegrees = new List <VacuumDegree>
            {
                new VacuumDegree()
                {
                    System = "IG", Value = 1f, Unit = "torr"
                },
            };

            var usageRecord = new UsageRecord();

            usageRecord.SetVacuumDegreeInfo(vacuumDegrees);
            var actual = usageRecord.GetVacuumDegreeInfo();

            Assert.Equal(vacuumDegrees[0].System, actual[0].System);
            Assert.Equal(vacuumDegrees[0].Value, actual[0].Value);
            Assert.Equal(vacuumDegrees[0].Unit, actual[0].Unit);
        }
        public void Test_SetAndGetTestInfo()
        {
            var tests = new List <Test>
            {
                new Test()
                {
                    System = "S1", Value = 1f, Unit = "cps"
                },
            };

            var usageRecord = new UsageRecord();

            usageRecord.SetTestInfo(tests);
            var actual = usageRecord.GetTestInfo();

            Assert.Equal(tests[0].System, actual[0].System);
            Assert.Equal(tests[0].Value, actual[0].Value);
            Assert.Equal(tests[0].Unit, actual[0].Unit);
        }
        public void Test_SetAndGetColumnInfo()
        {
            var columns = new List <Column>
            {
                new Column()
                {
                    System = "A", SerialNumber = "001", Value = 1f, Unit = "Mpa"
                },
            };

            var usageRecord = new UsageRecord();

            usageRecord.SetColumnInfo(columns);
            var actual = usageRecord.GetColumnInfo();

            //Assert.Equal("[{\"System\":\"A\",\"SerialNumber\":\"001\",\"Value\":1.0,\"Unit\":\"Mpa\"}]", usageRecord.Column);
            Assert.Equal(columns[0].System, actual[0].System);
            Assert.Equal(columns[0].SerialNumber, actual[0].SerialNumber);
            Assert.Equal(columns[0].Value, actual[0].Value);
            Assert.Equal(columns[0].Unit, actual[0].Unit);
        }
        internal async Task MergeLoad(Stream stream, CancellationToken cancellationToken)
        {
            const int recordLength = 12;
            var       buffer       = new byte[recordLength * 200];
            int       bytesRead;

            do
            {
                bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken);

                for (int i = 0; i <= bytesRead - recordLength; i += recordLength)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    var key    = BitConverter.ToUInt32(buffer, i);
                    var record = new UsageRecord {
                        lastRead  = BitConverter.ToUInt32(buffer, i + 4),
                        frequency = BitConverter.ToUInt32(buffer, i + 8)
                    };
                    MergeRecord(key, record);
                }
            } while (bytesRead > 0);
        }
Ejemplo n.º 21
0
        public static List <UsageRecord> GetUsageDetails(string restUrl, Guid orgId, RateCardPayload rateCardInfo)
        {
            string             nextLink     = "";
            List <UsageRecord> usageRecords = new List <UsageRecord>();

            do
            {
                HttpWebResponse httpWebResponse = null;

                try {
                    if (nextLink != "")
                    {
                        httpWebResponse = AzureResourceManagerUtil.BillingRestApiCall(nextLink, orgId);
                    }
                    else
                    {
                        httpWebResponse = AzureResourceManagerUtil.BillingRestApiCall(restUrl, orgId);
                    }

                    if (httpWebResponse == null)
                    {
                        Trace.TraceWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                        Trace.TraceWarning($"{nameof(httpWebResponse)} == null");
                        Trace.TraceWarning($"     {nameof(GetUsageDetails)}({nameof(restUrl)}, {nameof(orgId)})");
                        Trace.TraceWarning($"     {nameof(restUrl)}: {restUrl}");
                        Trace.TraceWarning($"     {nameof(orgId)}: {orgId}");

                        // throw exception to start from scretch and retry.
                        //throw new Exception("Possible reason: Bad request (400), Forbidden (403) to access. Server busy. Client blacklisted.");
                    }
                    else
                    {
                        // look response codes @ https://msdn.microsoft.com/en-us/library/azure/mt219001.aspx
                        if (httpWebResponse.StatusCode == HttpStatusCode.OK)
                        {
                            Trace.TraceInformation($"Received Rest Call Response: {nameof(HttpStatusCode.OK)}. Processing...");
                            string streamContent;

                            using (Stream receiveStream = httpWebResponse.GetResponseStream()) {
                                // Pipes the stream to a higher level stream reader with the required encoding format.
                                using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8)) {
                                    streamContent = readStream.ReadToEnd();
                                }
                            }

                            UsagePayload usagePayload = JsonConvert.DeserializeObject <UsagePayload>(streamContent);

                            foreach (UsageAggregate ua in usagePayload.Value)
                            {
                                // handle adding cost in
                                var usageRecord = new UsageRecord(ua);

                                try {
                                    var meterInfo = rateCardInfo.Meters.Where(p => p.MeterId == usageRecord.MeterId).SingleOrDefault();

                                    if (meterInfo.MeterRates.Count > 1)
                                    {
                                        Trace.TraceWarning("Multiple rates for meter: " + usageRecord.MeterId);
                                    }

                                    usageRecord.Cost = (double)meterInfo.MeterRates["0"] * usageRecord.Quantity;
                                    //if (usageRecord.cost < 0.01) usageRecord.cost = 0; // TODO: usage cost is definitelly NOT rounded like this
                                } catch (Exception ex) {
                                    Trace.TraceError("Exception trying to apply cost info for meter: " + usageRecord.MeterId);
                                }

                                usageRecords.Add(usageRecord);
                            }

                            ContinuationToken contToken = JsonConvert.DeserializeObject <ContinuationToken>(streamContent);
                            nextLink = contToken.NextLink ?? "";
                        }
                        else if (httpWebResponse.StatusCode == HttpStatusCode.Accepted)
                        {
                            Trace.TraceWarning($"Data not ready. {nameof(HttpStatusCode.Accepted)}. Waiting 6 min. now: {DateTime.UtcNow}");
                            Thread.Sleep(1000 * 60 * 6);                     // wait a bit to have data get prepared by azure
                            nextLink = restUrl;                              // set next link to same URL for second call
                        }
                        else
                        {
                            Trace.TraceWarning("NEW RESPONSE TYPE. HANDLE THIS!");
                            Trace.TraceWarning($"code:{httpWebResponse.StatusCode} desc:{httpWebResponse.StatusDescription}");
                        }
                    }
                } finally {
                    httpWebResponse?.Dispose();
                }
            } while (nextLink != "");

            return(usageRecords);
        }
Ejemplo n.º 22
0
 private bool Validate(UsageRecord usageRecord) =>
 _projectsWebCacheService.CachedProjects.Any(item => item.FullName == usageRecord.ProjectName) &&
 _equipmentHourlyRatesLocalCacheService.CachedEquipmentHourlyRates.Any(item => item.EquipmentNo == usageRecord.EquipmentNo);
Ejemplo n.º 23
0
        public static List <UsageRecord> GetUsageDetails(string restURL, string orgID, RateCardPayload rateCardInfo)
        {
            string             nextLink     = "";
            List <UsageRecord> usageRecords = new List <UsageRecord>();

            do
            {
                HttpWebResponse httpWebResponse = null;

                if (nextLink != "")
                {
                    httpWebResponse = AzureResourceManagerUtil.BillingRestApiCall(nextLink, orgID);
                }
                else
                {
                    httpWebResponse = AzureResourceManagerUtil.BillingRestApiCall(restURL, orgID);
                }

                if (httpWebResponse == null)
                {
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    Console.WriteLine("httpWebResponse == null");
                    Console.WriteLine("     GetUsageDetails(string restURL, string orgID)");
                    Console.WriteLine("     restURL: {0}", restURL);
                    Console.WriteLine("     orgID: {0}", orgID);

                    // throw exception to start from scretch and retry.
                    //throw new Exception("Possible reason: Bad request (400), Forbidden (403) to access. Server busy. Client blacklisted.");
                }
                else
                {
                    // look response codes @ https://msdn.microsoft.com/en-us/library/azure/mt219001.aspx
                    if (httpWebResponse.StatusCode == HttpStatusCode.OK)
                    {
                        Console.WriteLine("Received Rest Call Response: HttpStatusCode.OK. Processing...");
                        Stream receiveStream = httpWebResponse.GetResponseStream();

                        // Pipes the stream to a higher level stream reader with the required encoding format.
                        StreamReader readStream    = new StreamReader(receiveStream, Encoding.UTF8);
                        string       streamContent = readStream.ReadToEnd();

                        UsagePayload usagePayload = JsonConvert.DeserializeObject <UsagePayload>(streamContent);

                        foreach (UsageAggregate ua in usagePayload.value)
                        {
                            //Handle adding cost in
                            var ur = new UsageRecord(ua);
                            try {
                                var meterInfo = rateCardInfo.Meters.Where(p => p.MeterId == ur.meterId).SingleOrDefault();
                                ur.cost = meterInfo.MeterRates["0"] * Convert.ToDecimal(ur.quantity);
                                if (ur.cost < 0.01M)
                                {
                                    ur.cost = 0;
                                }
                            } catch (Exception ex)
                            {
                                Console.WriteLine("Exception trying to apply cost info for meter: " + ur.meterId);
                            }
                            usageRecords.Add(ur);
                        }

                        ContinuationToken contToken = JsonConvert.DeserializeObject <ContinuationToken>(streamContent);
                        if (contToken.nextLink != null)
                        {
                            nextLink = contToken.nextLink;
                        }
                        else
                        {
                            nextLink = "";
                        }
                    }
                    else if (httpWebResponse.StatusCode == HttpStatusCode.Accepted)
                    {
                        Console.WriteLine("Data not ready. HttpStatusCode.Accepted. Waiting 6 min. now: {0}", DateTime.Now.ToString());
                        Thread.Sleep(1000 * 60 * 6); // wait a bit to have data get prepared by azure
                        nextLink = restURL;          // set next link to same URL for second call
                    }
                    else
                    {
                        Console.WriteLine("NEW RESPONSE TYPE. HANDLE THIS!");
                        Console.WriteLine("code:{0} desc:{1}", httpWebResponse.StatusCode, httpWebResponse.StatusDescription);
                    }
                }
            } while (nextLink != "");

            return(usageRecords);
        }
Ejemplo n.º 24
0
        public override void handlePOSTRequest(HttpProcessor p, StreamReader inputData)
        {
            string pageLower = p.requestedPage.ToLower();

            if (pageLower.StartsWith("api/"))
            {
                string cmd = p.requestedPage.Substring("api/".Length);
                switch (cmd)
                {
                case "uploadUsageRecord1":
                case "uploadUsageRecord2":
                {
                    // If this needs extended in the future, just make a new "case" with an incremented number.
                    string allUploaded = inputData.ReadToEnd();
                    if (allUploaded.Length < 33)
                    {
                        return;
                    }
                    string md5 = allUploaded.Substring(allUploaded.Length - 32).ToLower();
                    allUploaded = allUploaded.Remove(allUploaded.Length - 32);
                    string md5Verify = Hash.GetMD5Hex(allUploaded);
                    if (md5 != md5Verify)
                    {
                        p.writeFailure("400 Bad Request");
                        return;
                    }
                    UsageRecordUpload.v2.Upload_Record record = JsonConvert.DeserializeObject <UsageRecordUpload.v2.Upload_Record>(allUploaded);
                    DB.Agent.AddUsageRecord(record);
                    p.writeSuccess("text/plain", 0);
                }
                break;

                case "getUsageRecords":
                {
                    JSAPI.APIResponse response;
                    int detailsForId = p.GetIntParam("detailsForId", -1);
                    if (detailsForId > -1)
                    {
                        UsageRecord record = Agent.GetUsageRecord(detailsForId);
                        if (record == null)
                        {
                            response = new JSAPI.APIResponse("Could not find record \"" + detailsForId + "\"");
                        }
                        else
                        {
                            List <Camera>  cameras = Agent.GetCameras(record.ID);
                            List <GpuInfo> gpus    = Agent.GetGpus(record.ID);
                            response = new JSAPI.DetailedRecordResponse(record, cameras, gpus);
                            if (IsAdmin(p))
                            {
                                JSAPI.DetailedRecordResponse response2 = (JSAPI.DetailedRecordResponse)response;
                                response2.secret = response2.usage.Secret;
                            }
                        }
                    }
                    else
                    {
                        response = new JSAPI.AllUsageRecordsResponse(Agent.GetAllUsageRecords_TimestampDesc());
                        if (IsAdmin(p))
                        {
                            JSAPI.AllUsageRecordsResponse response2 = (JSAPI.AllUsageRecordsResponse)response;
                            response2.secrets = response2.records.Select(r => new UsageRecord_Secret_Map()
                                {
                                    ID = r.ID, Secret = r.Secret
                                });
                        }
                    }
                    byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(response));
                    p.CompressResponseIfCompatible();
                    List <KeyValuePair <string, string> > additionalHeaders = new List <KeyValuePair <string, string> >();
                    additionalHeaders.Add(new KeyValuePair <string, string>("Cache-Control", "no-cache, no-store"));
                    p.writeSuccess("application/json", additionalHeaders: additionalHeaders);
                    p.outputStream.Flush();
                    p.tcpStream.Write(data, 0, data.Length);
                    p.tcpStream.Flush();
                }
                break;

                case "deleteRecord":
                {
                    JSAPI.APIResponse response;
                    if (!IsAdmin(p))
                    {
                        response = new JSAPI.APIResponse("Unauthorized");
                    }
                    else
                    {
                        int id = p.GetIntParam("id", -1);
                        if (id < 0)
                        {
                            response = new JSAPI.APIResponse("Invalid ID");
                        }
                        else
                        {
                            bool success = Agent.DeleteUsageRecord(id);
                            if (success)
                            {
                                response = new JSAPI.APIResponse();
                            }
                            else
                            {
                                response = new JSAPI.APIResponse("Failed to delete record");
                            }
                        }
                    }
                    byte[] data = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(response));
                    p.writeSuccess("application/json", data.Length);
                    p.outputStream.Flush();
                    p.tcpStream.Write(data, 0, data.Length);
                    p.tcpStream.Flush();
                }
                break;
                }
            }
        }
Ejemplo n.º 25
0
 public Project?GetProject(UsageRecord usageRecord) =>
 _cacheService.CachedProjects.FirstOrDefault(item => item.Name == usageRecord.ProjectName);
        public static List<UsageRecord> GetUsageDetails(string restURL, string orgID, RateCardPayload rateCardInfo)
        {
            string nextLink = "";
            List<UsageRecord> usageRecords = new List<UsageRecord>();

            do
            {
                HttpWebResponse httpWebResponse = null;

                if (nextLink != "")
                    httpWebResponse = AzureResourceManagerUtil.BillingRestApiCall(nextLink, orgID);
                else
                    httpWebResponse = AzureResourceManagerUtil.BillingRestApiCall(restURL, orgID);

                if (httpWebResponse == null)
                {
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    Console.WriteLine("httpWebResponse == null");
                    Console.WriteLine("     GetUsageDetails(string restURL, string orgID)");
                    Console.WriteLine("     restURL: {0}", restURL);
                    Console.WriteLine("     orgID: {0}", orgID);

                    // throw exception to start from scretch and retry.
                    //throw new Exception("Possible reason: Bad request (400), Forbidden (403) to access. Server busy. Client blacklisted.");
                }
                else
                {
                    // look response codes @ https://msdn.microsoft.com/en-us/library/azure/mt219001.aspx
                    if (httpWebResponse.StatusCode == HttpStatusCode.OK)
                    {
                        Console.WriteLine("Received Rest Call Response: HttpStatusCode.OK. Processing...");
                        Stream receiveStream = httpWebResponse.GetResponseStream();

                        // Pipes the stream to a higher level stream reader with the required encoding format.
                        StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);
                        string streamContent = readStream.ReadToEnd();

                        UsagePayload usagePayload = JsonConvert.DeserializeObject<UsagePayload>(streamContent);

                        foreach (UsageAggregate ua in usagePayload.value)
                        {
                            //Handle adding cost in
                            var ur = new UsageRecord(ua);
                            try {
                                var meterInfo = rateCardInfo.Meters.Where(p => p.MeterId == ur.meterId).SingleOrDefault();
                                ur.cost = meterInfo.MeterRates["0"] * Convert.ToDecimal(ur.quantity);
                                if (ur.cost < 0.01M)
                                    ur.cost = 0;
                            } catch (Exception ex)
                            {
                                Console.WriteLine("Exception trying to apply cost info for meter: " + ur.meterId);
                            }
                            usageRecords.Add(ur);
                        }

                        ContinuationToken contToken = JsonConvert.DeserializeObject<ContinuationToken>(streamContent);
                        if (contToken.nextLink != null)
                            nextLink = contToken.nextLink;
                        else
                            nextLink = "";
                    }
                    else if (httpWebResponse.StatusCode == HttpStatusCode.Accepted)
                    {
                        Console.WriteLine("Data not ready. HttpStatusCode.Accepted. Waiting 6 min. now: {0}", DateTime.Now.ToString());
                        Thread.Sleep(1000 * 60 * 6);  // wait a bit to have data get prepared by azure
                        nextLink = restURL;  // set next link to same URL for second call
                    }
                    else
                    {
                        Console.WriteLine("NEW RESPONSE TYPE. HANDLE THIS!");
                        Console.WriteLine("code:{0} desc:{1}", httpWebResponse.StatusCode, httpWebResponse.StatusDescription);
                    }
                }
            } while (nextLink != "");

            return usageRecords;
        }
Ejemplo n.º 27
0
 public EquipmentHourlyRate?GetEquipmentHourlyRate(UsageRecord usageRecord) =>
 _cacheService.CachedEquipmentHourlyRates.FirstOrDefault(item => item.EquipmentNo == usageRecord.EquipmentNo);
Ejemplo n.º 28
0
 public UsageRecordPersisientEventArgs(UsageRecord usageRecord, UsageRecordsChangeEventKind eventKind)
 {
     EventKind   = eventKind;
     UsageRecord = usageRecord;
 }
Ejemplo n.º 29
0
 public UsageRecordInExcel(UsageRecord usageRecord)
 {
     _usageRecord = usageRecord;
 }
 public async ValueTask IndexAsync(UsageRecord usageRecord) =>
 await _elasticClient.IndexAsync(usageRecord, item => item.Index(IndexName));
Ejemplo n.º 31
0
 public DetailedRecordResponse(UsageRecord usage, IEnumerable <Camera> cameras, IEnumerable <GpuInfo> gpus)
 {
     this.usage   = usage;
     this.cameras = cameras;
     this.gpus    = gpus;
 }