- Log(LOGDEBUG, "Got key=%s and value=%s", key, value);
- if (strcmp(key, "id") == 0)
- {
- if (sensor != NULL)
- {
- Log(LOGERR, "Only one sensor id should be specified");
- status = STATUS_ERROR;
- break;
- }
- if (*value == '\0')
- {
- Log(LOGERR, "No id specified.");
- status = STATUS_ERROR;
- break;
- }
-
- sensor = Sensor_Identify(value);
- if (sensor == NULL)
- {
- Log(LOGERR, "Invalid sensor id: %s", value);
- status = STATUS_ERROR;
- break;
- }
- }
- else if (strcmp(key, "dump") == 0)
- {
- if (operation != DEFAULT)
- {
- Log(LOGERR, "Operation already specified!");
- status = STATUS_ERROR;
- break;
- }
- operation = DUMP;
- }
- else
- {
- Log(LOGERR, "Unknown key \"%s\" (value = %s)", key, value);
- status = STATUS_ERROR;
- break;
- }
- }
-
- if (status != STATUS_ERROR && sensor == NULL)
- {
- Log(LOGERR, "No valid sensor id given");
- status = STATUS_ERROR;
- }
-
- if (status == STATUS_ERROR)
- {
- FCGI_RejectJSON(context, "Invalid input parameters");
- return;
- }
-
- switch (operation)
- {
- case DUMP:
- {
- //Force download with content-disposition
- FCGI_PrintRaw("Content-type: text/plain\r\n"
- "Content-disposition: attachment;filename=%d.csv\r\n\r\n",
- sensor->id);
- //CRITICAL SECTION
- pthread_mutex_lock(&(sensor->mutex));
- fseek(sensor->file, 0, SEEK_SET);
- int amount_read = 0;
- do
- {
- amount_read = fread(buffer, sizeof(DataPoint), SENSOR_QUERYBUFSIZ, sensor->file);
- for (int i = 0; i < amount_read; ++i)
- {
- FCGI_PrintRaw("%f\t%f\n", buffer[i].time_stamp, buffer[i].value);
- }
-
- }
- while (amount_read == SENSOR_QUERYBUFSIZ);
- pthread_mutex_unlock(&(sensor->mutex));
- // end critical section