Add /info method to cgi_blerg
authorChip Black <bytex64@bytex64.net>
Tue, 28 Dec 2010 10:33:29 +0000 (04:33 -0600)
committerChip Black <bytex64@bytex64.net>
Tue, 28 Dec 2010 10:33:29 +0000 (04:33 -0600)
cgi/cgi_blerg.c

index 6469289..db791a0 100644 (file)
@@ -135,6 +135,48 @@ int main(int argc, char *argv[]) {
                }
 
                blerg_close(b);
+       } else if (strncmp(path, "/info", 5) == 0) {
+               if (strcmp(request_method, "GET") != 0) {
+                       respond_405();
+                       exit(0);
+               }
+
+               if (path[5] != '/') {
+                       respond_404();
+                       exit(0);
+               }
+
+               ret = parse_url_info(path + 6, &info);
+               if ((ret & URL_INFO_AUTHOR) == 0) {
+                       respond_404();
+                       exit(0);
+               }
+
+               if (!blerg_exists(info.author)) {
+                       respond_404();
+                       exit(0);
+               }
+
+               struct blerg *b = blerg_open(info.author);
+               uint64_t record_count = blerg_get_record_count(b);
+               blerg_close(b);
+
+               char number[21];
+               yajl_gen g = yajl_gen_alloc(&yajl_c, NULL);
+               yajl_gen_map_open(g);
+               yajl_gen_string(g, "record_count", 12);
+               snprintf(number, 21, "%llu", record_count);
+               yajl_gen_string(g, number, strlen(number));
+               yajl_gen_map_close(g);
+
+               const unsigned char *ybuf;
+               yajl_gen_get_buf(g, &ybuf, &len);
+
+               printf("Content-type: application/json\r\n");
+               printf("Content-length: %d\r\n\r\n", len);
+               write(0, ybuf, len);
+
+               yajl_gen_free(g);
        } else {
                respond_404();
                exit(0);