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:
parent
ef9e42e030
commit
1aa4b0e590
42
src/ssb.c
42
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,19 +1226,23 @@ 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))
|
{
|
||||||
|
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");
|
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))
|
||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user