void VertexServer_requestHandler(void *arg) { VertexServer *self = (VertexServer *)arg; VertexServer_setupYajl(self); HttpResponse_setContentType_(self->httpResponse, "application/json;charset=utf-8"); int result = VertexServer_process(self); Datum *content = HttpResponse_content(self->httpResponse); if (result == 0) { if (!Datum_size(content)) { Datum_setCString_(content, "null"); } Datum_nullTerminate(content); } else { if (!Datum_size(content)) { Datum_setCString_(content, "\"unknown error\""); } Datum_nullTerminate(content); yajl_gen_clear(self->yajl); yajl_gen_datum(self->yajl, content); Datum_setYajl_(content, self->yajl); if(self->debug) { Log_Printf_("REQUEST ERROR: %s\n", Datum_data(content)); } } }
void VertexServer_SignalHandler(int s) { if(s == SIGPIPE) { Log_Printf("received signal SIGPIPE - ignoring\n"); return; } Log_Printf_("received signal %i\n", s); VertexServer_api_shutdown(globalVertexServer); }
int File_create(File *self) { FILE *fp = fopen(Datum_data(self->path), "w"); if(!fp) { Log_Printf_("File: unable to create file '%s'\n", Datum_data(self->path)); return -1; } fclose(fp); return 0; }
int VertexServer_backup(VertexServer *self) { time_t now = time(NULL); int result; Log_Printf_("backup at %i bytes written... ", (int)PDB_bytesWaitingToCommit(self->pdb)); PDB_commit(self->pdb); result = PDB_backup(self->pdb); Log_Printf__("backup %s and took %i seconds\n", result ? "failed" : "successful", (int)difftime(time(NULL), now)); return result; }
int VertexServer_api_collectGarbage(VertexServer *self) { time_t t1 = time(NULL); long savedCount = PDB_collectGarbage(self->pdb); double dt = difftime(time(NULL), t1); yajl_gen_map_open(self->yajl); yajl_gen_cstring(self->yajl, "saved"); yajl_gen_integer(self->yajl, savedCount); yajl_gen_cstring(self->yajl, "seconds"); yajl_gen_integer(self->yajl, (int)dt); yajl_gen_map_close(self->yajl); Datum_appendYajl_(self->result, self->yajl); Log_Printf_("gc: %s\n", Datum_data(self->result)); return 0; }
void VertexServer_writePidFile(VertexServer *self) { FILE *pidFile = fopen(self->pidPath, "w"); if (!pidFile) { Log_Printf_("Unable to open pid file for writing: %s\n", self->pidPath); exit(-1); } else { if (fprintf(pidFile, "%i", getpid()) < 0) { Log_Printf("Error writing to pid file\n"); exit(-1); } if (fclose(pidFile)) { Log_Printf("Error closing pid file\n"); exit(-1); } } }