logging
[psensor.git] / src / rsensor.c
index fadd02a..e328da9 100644 (file)
 #include <libintl.h>
 #define _(str) gettext(str)
 
-#include "url.h"
-#include "server/server.h"
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #include <curl/curl.h>
-#include <json/json.h>
 
+#include "psensor_json.h"
 #include "rsensor.h"
+#include "server/server.h"
+#include "url.h"
 
 struct ucontent {
        char *data;
@@ -73,42 +72,12 @@ static char *create_api_1_0_sensors_url(const char *base_url)
        return ret;
 }
 
-static struct psensor *json_object_to_psensor(json_object * o,
-                                             const char *sensors_url,
-                                             int values_max_length)
-{
-       json_object *oid;
-       json_object *oname;
-       json_object *otype;
-       struct psensor *s;
-       char *eid;
-       char *url;
-
-       oid = json_object_object_get(o, "id");
-       oname = json_object_object_get(o, "name");
-       otype = json_object_object_get(o, "type");
-
-       eid = url_encode(json_object_get_string(oid));
-       url = malloc(strlen(sensors_url) + 1 + strlen(eid) + 1);
-       sprintf(url, "%s/%s", sensors_url, eid);
-
-       s = psensor_create(strdup(url),
-                          strdup(json_object_get_string(oname)),
-                          json_object_get_int(otype) | SENSOR_TYPE_REMOTE,
-                          values_max_length);
-       s->url = url;
-
-       free(eid);
-
-       return s;
-}
-
 void rsensor_init()
 {
        curl = curl_easy_init();
 }
 
-void rsensor_end()
+void rsensor_cleanup()
 {
        curl_easy_cleanup(curl);
 }
@@ -131,10 +100,11 @@ static json_object *get_json_object(const char *url)
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
 
+       log_debug("HTTP request %s", url);
        if (curl_easy_perform(curl) == CURLE_OK)
                obj = json_tokener_parse(chunk.data);
        else
-               fprintf(stderr, _("ERROR: Fail to connect to: %s\n"), url);
+               log_printf(LOG_ERR, _("Fail to connect to: %s"), url);
 
        free(chunk.data);
 
@@ -144,9 +114,10 @@ static json_object *get_json_object(const char *url)
 struct psensor **get_remote_sensors(const char *server_url,
                                    int values_max_length)
 {
-       struct psensor **sensors;
+       struct psensor **sensors, *s;
        char *url;
        json_object *obj;
+       int i, n;
 
        sensors = NULL;
 
@@ -155,15 +126,14 @@ struct psensor **get_remote_sensors(const char *server_url,
        obj = get_json_object(url);
 
        if (obj && !is_error(obj)) {
-               int i;
-               int n = json_object_array_length(obj);
+               n = json_object_array_length(obj);
                sensors = malloc((n + 1) * sizeof(struct psensor *));
 
                for (i = 0; i < n; i++) {
-                       struct psensor *s = json_object_to_psensor
-                           (json_object_array_get_idx(obj, i),
-                            url,
-                            values_max_length);
+                       s = psensor_new_from_json
+                               (json_object_array_get_idx(obj, i),
+                                url,
+                                values_max_length);
                        sensors[i] = s;
                }
 
@@ -171,7 +141,7 @@ struct psensor **get_remote_sensors(const char *server_url,
 
                json_object_put(obj);
        } else {
-               fprintf(stderr, _("ERROR: Invalid content: %s\n"), url);
+               log_printf(LOG_ERR, _("Invalid content: %s"), url);
        }
 
        free(url);
@@ -211,7 +181,7 @@ void remote_psensor_update(struct psensor *s)
 
                json_object_put(obj);
        } else {
-               printf(_("ERROR: Invalid JSON: %s\n"), s->url);
+               log_printf(LOG_ERR, _("Invalid JSON: %s"), s->url);
        }
 
 }