Пример #1
0
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)); }
	}
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
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;
}
Пример #5
0
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;
}
Пример #6
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);
		}
	}
}