forked from cory/tildefriends
		
	Hook up some stats from the SSB side.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3822 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		
							
								
								
									
										44
									
								
								src/ssb.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								src/ssb.c
									
									
									
									
									
								
							| @@ -146,6 +146,10 @@ typedef struct _tf_ssb_t { | |||||||
| 	uint8_t pub[crypto_sign_PUBLICKEYBYTES]; | 	uint8_t pub[crypto_sign_PUBLICKEYBYTES]; | ||||||
| 	uint8_t priv[crypto_sign_SECRETKEYBYTES]; | 	uint8_t priv[crypto_sign_SECRETKEYBYTES]; | ||||||
|  |  | ||||||
|  | 	int messages_stored; | ||||||
|  | 	int rpc_in; | ||||||
|  | 	int rpc_out; | ||||||
|  |  | ||||||
| 	tf_ssb_connection_t* connections; | 	tf_ssb_connection_t* connections; | ||||||
| 	int connections_count; | 	int connections_count; | ||||||
|  |  | ||||||
| @@ -470,6 +474,7 @@ void tf_ssb_connection_rpc_send(tf_ssb_connection_t* connection, uint8_t flags, | |||||||
| 	_tf_ssb_connection_box_stream_send(connection, combined, 1 + 2 * sizeof(uint32_t) + size); | 	_tf_ssb_connection_box_stream_send(connection, combined, 1 + 2 * sizeof(uint32_t) + size); | ||||||
| 	free(combined); | 	free(combined); | ||||||
| 	printf("RPC SEND flags=%x RN=%d: %.*s\n", flags, request_number, (int)size, message); | 	printf("RPC SEND flags=%x RN=%d: %.*s\n", flags, request_number, (int)size, message); | ||||||
|  | 	connection->ssb->rpc_out++; | ||||||
| } | } | ||||||
|  |  | ||||||
| void tf_ssb_calculate_message_id(JSContext* context, JSValue message, char* out_id, size_t out_id_size) | void tf_ssb_calculate_message_id(JSContext* context, JSValue message, char* out_id, size_t out_id_size) | ||||||
| @@ -996,6 +1001,7 @@ static bool _tf_ssb_name_equals(JSContext* context, JSValue object, const char** | |||||||
|  |  | ||||||
| static void _tf_ssb_connection_rpc_recv(tf_ssb_connection_t* connection, uint8_t flags, int32_t request_number, const uint8_t* message, size_t size) | static void _tf_ssb_connection_rpc_recv(tf_ssb_connection_t* connection, uint8_t flags, int32_t request_number, const uint8_t* message, size_t size) | ||||||
| { | { | ||||||
|  | 	connection->ssb->rpc_in++; | ||||||
| 	if (flags & k_ssb_rpc_flag_json) | 	if (flags & k_ssb_rpc_flag_json) | ||||||
| 	{ | 	{ | ||||||
| 		printf("RPC RECV flags=%x RN=%d: %.*s\n", flags, request_number, (int)size, message); | 		printf("RPC RECV flags=%x RN=%d: %.*s\n", flags, request_number, (int)size, message); | ||||||
| @@ -1220,10 +1226,16 @@ void tf_ssb_append_message(tf_ssb_t* ssb, JSValue message) | |||||||
|  |  | ||||||
| 	char id[sodium_base64_ENCODED_LEN(crypto_hash_sha256_BYTES, sodium_base64_VARIANT_ORIGINAL) + 7 + 1]; | 	char id[sodium_base64_ENCODED_LEN(crypto_hash_sha256_BYTES, sodium_base64_VARIANT_ORIGINAL) + 7 + 1]; | ||||||
| 	tf_ssb_calculate_message_id(ssb->context, root, id, sizeof(id)); | 	tf_ssb_calculate_message_id(ssb->context, root, id, sizeof(id)); | ||||||
| 	if (valid && | 	if (valid) | ||||||
| 		!tf_ssb_db_store_message(ssb, ssb->context, id, root, signature_base64, false)) |  | ||||||
| 	{ | 	{ | ||||||
| 		printf("message not stored.\n"); | 		if (tf_ssb_db_store_message(ssb, ssb->context, id, root, signature_base64, false)) | ||||||
|  | 		{ | ||||||
|  | 			tf_ssb_notify_message_added(ssb, id); | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 		{ | ||||||
|  | 			printf("message not stored.\n"); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (!tf_ssb_verify_and_strip_signature(ssb->context, root, NULL, 0, NULL)) | 	if (!tf_ssb_verify_and_strip_signature(ssb->context, root, NULL, 0, NULL)) | ||||||
| @@ -1231,8 +1243,6 @@ void tf_ssb_append_message(tf_ssb_t* ssb, JSValue message) | |||||||
| 		printf("Failed to verify message signature.\n"); | 		printf("Failed to verify message signature.\n"); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	tf_ssb_notify_message_added(ssb, id); |  | ||||||
|  |  | ||||||
| 	JS_FreeValue(context, root); | 	JS_FreeValue(context, root); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1603,6 +1613,29 @@ static void _tf_ssb_trace_timer(uv_timer_t* timer) | |||||||
| 	tf_trace_counter(ssb->trace, "ssb", _countof(values), names, values); | 	tf_trace_counter(ssb->trace, "ssb", _countof(values), names, values); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void tf_ssb_get_stats(tf_ssb_t* ssb, tf_ssb_stats_t* out_stats) | ||||||
|  | { | ||||||
|  | 	*out_stats = (tf_ssb_stats_t) | ||||||
|  | 	{ | ||||||
|  | 		.connections = ssb->connections_count, | ||||||
|  | 		.broadcasts = ssb->broadcasts_count, | ||||||
|  | 		.messages_stored = ssb->messages_stored, | ||||||
|  | 		.rpc_in = ssb->rpc_in, | ||||||
|  | 		.rpc_out = ssb->rpc_out, | ||||||
|  | 		.callbacks = | ||||||
|  | 		{ | ||||||
|  | 			.rpc = ssb->rpc_count, | ||||||
|  | 			.connections_changed = ssb->connections_changed_count, | ||||||
|  | 			.message_added = ssb->message_added_count, | ||||||
|  | 			.blob_want_added = ssb->blob_want_added_count, | ||||||
|  | 			.broadcasts_changed = ssb->broadcasts_changed_count, | ||||||
|  | 		}, | ||||||
|  | 	}; | ||||||
|  | 	ssb->messages_stored = 0; | ||||||
|  | 	ssb->rpc_in = 0; | ||||||
|  | 	ssb->rpc_out = 0; | ||||||
|  | } | ||||||
|  |  | ||||||
| tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const char* secrets_path) | tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const char* secrets_path) | ||||||
| { | { | ||||||
| 	tf_ssb_t* ssb = malloc(sizeof(tf_ssb_t)); | 	tf_ssb_t* ssb = malloc(sizeof(tf_ssb_t)); | ||||||
| @@ -2577,6 +2610,7 @@ void tf_ssb_remove_message_added_callback(tf_ssb_t* ssb, tf_ssb_message_added_ca | |||||||
| void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id) | void tf_ssb_notify_message_added(tf_ssb_t* ssb, const char* id) | ||||||
| { | { | ||||||
| 	tf_ssb_message_added_callback_node_t* next = NULL; | 	tf_ssb_message_added_callback_node_t* next = NULL; | ||||||
|  | 	ssb->messages_stored++; | ||||||
| 	for (tf_ssb_message_added_callback_node_t* node = ssb->message_added; node; node = next) | 	for (tf_ssb_message_added_callback_node_t* node = ssb->message_added; node; node = next) | ||||||
| 	{ | 	{ | ||||||
| 		next = node->next; | 		next = node->next; | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								src/ssb.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/ssb.h
									
									
									
									
									
								
							| @@ -39,6 +39,23 @@ enum { | |||||||
| 	k_blob_id_len =  53, | 	k_blob_id_len =  53, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | typedef struct _tf_ssb_stats_t | ||||||
|  | { | ||||||
|  | 	int connections; | ||||||
|  | 	int broadcasts; | ||||||
|  | 	int messages_stored; | ||||||
|  | 	int rpc_in; | ||||||
|  | 	int rpc_out; | ||||||
|  | 	struct | ||||||
|  | 	{ | ||||||
|  | 		int rpc; | ||||||
|  | 		int connections_changed; | ||||||
|  | 		int message_added; | ||||||
|  | 		int blob_want_added; | ||||||
|  | 		int broadcasts_changed; | ||||||
|  | 	} callbacks; | ||||||
|  | } tf_ssb_stats_t; | ||||||
|  |  | ||||||
| tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const char* secrets_path); | tf_ssb_t* tf_ssb_create(uv_loop_t* loop, JSContext* context, sqlite3* db, const char* secrets_path); | ||||||
| void tf_ssb_destroy(tf_ssb_t* ssb); | void tf_ssb_destroy(tf_ssb_t* ssb); | ||||||
|  |  | ||||||
| @@ -114,3 +131,5 @@ void tf_ssb_connection_rpc_send(tf_ssb_connection_t* connection, uint8_t flags, | |||||||
| void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t request_number, tf_ssb_rpc_callback_t* callback, void* user_data); | void tf_ssb_connection_add_request(tf_ssb_connection_t* connection, int32_t request_number, tf_ssb_rpc_callback_t* callback, void* user_data); | ||||||
|  |  | ||||||
| JSClassID tf_ssb_get_connection_class_id(); | JSClassID tf_ssb_get_connection_class_id(); | ||||||
|  |  | ||||||
|  | void tf_ssb_get_stats(tf_ssb_t* ssb, tf_ssb_stats_t* out_stats); | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								src/task.c
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/task.c
									
									
									
									
									
								
							| @@ -730,6 +730,17 @@ static JSValue _tf_task_getStats(JSContext* context, JSValueConst this_val, int | |||||||
| 	{ | 	{ | ||||||
| 		JS_SetPropertyStr(context, result, "rss", JS_NewInt64(context, rss)); | 		JS_SetPropertyStr(context, result, "rss", JS_NewInt64(context, rss)); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (task->_ssb) | ||||||
|  | 	{ | ||||||
|  | 		tf_ssb_stats_t ssb_stats = { 0 }; | ||||||
|  | 		tf_ssb_get_stats(task->_ssb, &ssb_stats); | ||||||
|  |  | ||||||
|  | 		JS_SetPropertyStr(context, result, "messages_stored", JS_NewInt32(context, ssb_stats.messages_stored)); | ||||||
|  | 		JS_SetPropertyStr(context, result, "rpc_in", JS_NewInt32(context, ssb_stats.rpc_in)); | ||||||
|  | 		JS_SetPropertyStr(context, result, "rpc_out", JS_NewInt32(context, ssb_stats.rpc_out)); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return result; | 	return result; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user