#include "../include/net.go.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void print_and_free(const char* label, char* s) {
if (s == NULL) {
printf("%s: <null>\n", label);
return;
}
printf("%s: %s\n", label, s);
net_compute_free_cstring(s);
}
int main(void) {
const uint8_t psk[32] = {0x42};
net_meshnode_t* node = net_meshnode_new("127.0.0.1:0", psk, NULL);
if (node == NULL) {
fprintf(stderr, "net_meshnode_new failed\n");
return 1;
}
const char* caps =
"{\"tags\":["
"\"hardware.gpu\","
"\"hardware.gpu.h100\","
"\"hardware.gpu.count=8\","
"\"software.python=3.11\""
"],\"metadata\":{}}";
if (net_meshnode_announce_capabilities(node, caps) != 0) {
fprintf(stderr, "announce_capabilities failed\n");
net_meshnode_shutdown(node);
return 1;
}
net_compute_mesh_arc_t* arc = net_mesh_arc_clone(node);
if (arc == NULL) {
fprintf(stderr, "net_mesh_arc_clone failed\n");
net_meshnode_shutdown(node);
return 1;
}
{
const char* matcher = "{\"kind\":\"prefix\",\"value\":\"hardware.gpu\"}";
const char* group_by = "{\"kind\":\"tag_stem\",\"prefix\":\"hardware.gpu\"}";
const char* agg = "{\"kind\":\"count\"}";
char* rows = net_capability_aggregate(arc, matcher, group_by, agg);
print_and_free("[aggregate] count_by_gpu_stem", rows);
}
{
const char* query =
"{"
"\"matcher\":{\"kind\":\"prefix\",\"value\":\"hardware.gpu\"},"
"\"group_by\":{\"kind\":\"tag_stem\",\"prefix\":\"hardware.gpu\"},"
"\"max_rtt_ms\":null,"
"\"sum_axis_key\":\"hardware.gpu.count\","
"\"limit\":5"
"}";
char* rows = net_capability_capacity_ranking(arc, query, NULL);
print_and_free("[capacity_ranking] top_5_gpu_stems", rows);
}
net_mesh_arc_free(arc);
net_meshnode_shutdown(node);
return 0;
}