Esempio n. 1
0
        public List <MetricRecord> RetriveDataRecord(int id, int startIndex, int endIndex)
        {
            List <MetricRecord> result = new List <MetricRecord>();

            startIndex = startIndex < 0 ? 0 : startIndex;
            if (endIndex < startIndex)
            {
                return(result);
            }

            string query = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, id.ToString());

            query = TableQuery.CombineFilters(
                query,
                TableOperators.And,
                TableQuery.GenerateFilterCondition(
                    "RowKey",
                    QueryComparisons.GreaterThanOrEqual,
                    ((startIndex / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat))
                );

            query = TableQuery.CombineFilters(
                query,
                TableOperators.And,
                TableQuery.GenerateFilterCondition(
                    "RowKey",
                    QueryComparisons.LessThanOrEqual,
                    ((endIndex / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat))
                );

            TableQuery <DynamicTableEntity> rangeQuery = new TableQuery <DynamicTableEntity>().Where(query);

            foreach (DynamicTableEntity entity in _metricData.ExecuteQuery(rangeQuery))
            {
                MetricEntity mentity = new MetricEntity(entity);
                int          offset  = int.Parse(entity.RowKey);
                int          index;
                for (int i = 0; i < mentity.Count; i++)
                {
                    index = offset + i;
                    if (index >= startIndex && index <= endIndex)
                    {
                        result.Add(mentity.Get(i));
                    }
                }
            }

            return(result);
        }
Esempio n. 2
0
        public void AppendDataRecord(int id, string key, string value)
        {
            if (System.Text.UTF8Encoding.UTF8.GetByteCount(key) > MetricRecordKeyTooLongException.MaxKeyLengthInByte)
            {
                throw new MetricRecordKeyTooLongException();
            }

            using (var _gorillaCtx = new MSGorillaEntities())
            {
                MetricDataSet data = _gorillaCtx.MetricDataSets.Find(id);
                if (data == null)
                {
                    throw new MetricDataSetNotFoundException();
                }

                MetricEntity mentity = null;
                if ((data.RecordCount % MetricEntity.MaxMetricRecord) == 0)
                {
                    //create a new entity
                    mentity = new MetricEntity(id.ToString(), data.RecordCount.ToString(RowKeyFormat));
                }
                else
                {
                    //retrive the last entity
                    TableResult result = _metricData.ExecuteRetriveOperation(
                        TableOperation.Retrieve <DynamicTableEntity>(
                            id.ToString(),
                            ((data.RecordCount / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat)
                            )
                        );

                    mentity = new MetricEntity((DynamicTableEntity)result.Result);
                }

                //insert new data record
                mentity.Put(key, value, DateTime.UtcNow);
                TableOperation insertOperation = TableOperation.InsertOrReplace(mentity.ToITableEntity());
                _metricData.Execute(insertOperation);

                data.RecordCount++;
                _gorillaCtx.SaveChanges();
            }
        }