Skip to content

Commit 2fe4f47

Browse files
author
DvirDukhan
authored
Merge pull request #38 from RedisTimeSeries/fix_info_parse
convert info parse to ignore labels order
2 parents b05b45d + ee5b8a8 commit 2fe4f47

File tree

2 files changed

+48
-18
lines changed

2 files changed

+48
-18
lines changed

NRedisTimeSeries/DataTypes/TimeSeriesInformation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33

44
namespace NRedisTimeSeries.DataTypes

NRedisTimeSeries/TimeSeriesClientResponseParser.cs

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -110,24 +110,54 @@ private static IReadOnlyList<TimeSeriesRule> ParseRuleArray(RedisResult result)
110110

111111
private static TimeSeriesInformation ParseInfo(RedisResult result)
112112
{
113+
long totalSamples = -1, memoryUsage = -1, retentionTime = -1, chunkSize=-1, chunkCount = -1;
114+
TimeStamp firstTimestamp = null, lastTimestamp = null;
115+
IReadOnlyList<TimeSeriesLabel> labels = null;
116+
IReadOnlyList <TimeSeriesRule> rules = null;
117+
string sourceKey = null;
113118
RedisResult[] redisResults = (RedisResult[])result;
114-
long totalSamples = (long)redisResults[1];
115-
long memoryUsage = (long)redisResults[3];
116-
TimeStamp firstTimeStamp = ParseTimeStamp(redisResults[5]);
117-
TimeStamp lastTimeStamp = ParseTimeStamp(redisResults[7]);
118-
long retentionTime = (long)redisResults[9];
119-
long chunkCount = (long)redisResults[11];
120-
string chunkSizeProperty = (string)redisResults[12];
121-
long chunkSize = (long)redisResults[13];
122-
// If the property name is maxSamplesPerChunk then this is an old version of RedisTimeSeries and we used the number of samples before ( now Bytes )
123-
if (string.Equals(chunkSizeProperty, "maxSamplesPerChunk"))
124-
{
125-
chunkSize = chunkSize * 16;
119+
for(int i=0; i<redisResults.Length ; ++i){
120+
string label = (string)redisResults[i++];
121+
switch (label) {
122+
case "totalSamples":
123+
totalSamples = (long)redisResults[i];
124+
break;
125+
case "memoryUsage":
126+
memoryUsage = (long)redisResults[i];
127+
break;
128+
case "retentionTime":
129+
retentionTime = (long)redisResults[i];
130+
break;
131+
case "chunkCount":
132+
chunkCount = (long)redisResults[i];
133+
break;
134+
case "chunkSize":
135+
chunkSize = (long)redisResults[i];
136+
break;
137+
case "maxSamplesPerChunk":
138+
// If the property name is maxSamplesPerChunk then this is an old
139+
// version of RedisTimeSeries and we used the number of samples before ( now Bytes )
140+
chunkSize = chunkSize * 16;
141+
break;
142+
case "firstTimestamp":
143+
firstTimestamp = ParseTimeStamp(redisResults[i]);
144+
break;
145+
case "lastTimestamp":
146+
lastTimestamp = ParseTimeStamp(redisResults[i]);
147+
break;
148+
case "labels":
149+
labels = ParseLabelArray(redisResults[i]);
150+
break;
151+
case "sourceKey":
152+
sourceKey = (string)redisResults[i];
153+
break;
154+
case "rules":
155+
rules = ParseRuleArray(redisResults[i]);
156+
break;
157+
}
126158
}
127-
IReadOnlyList<TimeSeriesLabel> labels = ParseLabelArray(redisResults[15]);
128-
string destKey = (string)redisResults[17];
129-
IReadOnlyList<TimeSeriesRule> rules = ParseRuleArray(redisResults[19]);
130-
return new TimeSeriesInformation(totalSamples, memoryUsage, firstTimeStamp, lastTimeStamp, retentionTime, chunkCount, chunkSize, labels, destKey, rules);
159+
return new TimeSeriesInformation(totalSamples, memoryUsage, firstTimestamp,
160+
lastTimestamp, retentionTime, chunkCount, chunkSize, labels, sourceKey, rules);
131161
}
132162

133163
private static IReadOnlyList<string> ParseStringArray(RedisResult result)
@@ -139,4 +169,4 @@ private static IReadOnlyList<string> ParseStringArray(RedisResult result)
139169
return list;
140170
}
141171
}
142-
}
172+
}

0 commit comments

Comments
 (0)