aqhome-tool: added some commands
- getFirstData - getLastData - getPeriodData
This commit is contained in:
@@ -394,8 +394,8 @@ int AQH_Storage_AddDatapoint(AQH_STORAGE *sto, uint64_t valueId, uint64_t timest
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueId, uint64_t fromTime, uint64_t toTime, uint64_t maxArrayLen)
|
||||
uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueId, uint64_t fromTime, uint64_t toTime,
|
||||
uint64_t maxDataPointsRequested)
|
||||
{
|
||||
AQH_DATAFILE *df;
|
||||
uint64_t numEntries;
|
||||
@@ -410,13 +410,9 @@ uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueId, uint64_t
|
||||
return NULL;
|
||||
}
|
||||
numEntries=AQH_DataFile_GetNumberOfEntries(df);
|
||||
if (fromTime==0 && toTime==0)
|
||||
arrayLen=(numEntries*2)+1;
|
||||
else
|
||||
arrayLen=(AQH_STORAGE_DATAPOINTS_STEPS*2)+1;
|
||||
if (arrayLen>maxArrayLen+1)
|
||||
arrayLen=maxArrayLen+1;
|
||||
|
||||
if (maxDataPointsRequested>numEntries)
|
||||
maxDataPointsRequested=numEntries;
|
||||
arrayLen=(maxDataPointsRequested*2)+1;
|
||||
arrayPtr=(uint64_t*) malloc(arrayLen*sizeof(uint64_t));
|
||||
if (arrayPtr==NULL) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Not enough memory for %lu entries", (unsigned long int) arrayLen);
|
||||
@@ -438,30 +434,11 @@ uint64_t *AQH_Storage_GetDataPoints(AQH_STORAGE *sto, uint64_t valueId, uint64_t
|
||||
}
|
||||
|
||||
if ((fromTime==0 || ts>=fromTime) && (toTime==0 || ts<=toTime)) {
|
||||
if ((arrayPos+1)>maxArrayLen) {
|
||||
if ((arrayPos+1)>arrayLen) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Limit for number of returned entries reached");
|
||||
break;
|
||||
}
|
||||
if (arrayPos+1>=arrayLen) {
|
||||
uint64_t newArrayLen;
|
||||
void *p;
|
||||
|
||||
newArrayLen=arrayLen+(AQH_STORAGE_DATAPOINTS_STEPS*2);
|
||||
if (newArrayLen>maxArrayLen+1)
|
||||
newArrayLen=maxArrayLen+1;
|
||||
if (newArrayLen==arrayLen) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Limit for number of returned entries reached");
|
||||
break;
|
||||
}
|
||||
p=realloc((void*) arrayPtr, newArrayLen*sizeof(uint64_t));
|
||||
if (p==NULL) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Not enough memory for %lu entries", (unsigned long int) arrayLen+AQH_STORAGE_DATAPOINTS_STEPS);
|
||||
free(arrayPtr);
|
||||
return NULL;
|
||||
}
|
||||
arrayPtr=(uint64_t*) p;
|
||||
arrayLen=newArrayLen;
|
||||
}
|
||||
arrayPtr[arrayPos++]=ts;
|
||||
arrayPtr[arrayPos++]=u.i;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user