Skip to content
Snippets Groups Projects
Verified Commit ec7cd528 authored by Nicolas Werner's avatar Nicolas Werner
Browse files

Add script to plot history from memberstats

parent d9ab1420
No related branches found
No related tags found
No related merge requests found
Pipeline #2245 failed
......@@ -19,7 +19,6 @@ using namespace mtx::client;
using namespace mtx::http;
using namespace mtx::events;
namespace {
std::shared_ptr<Client> client = nullptr;
}
......@@ -88,31 +87,29 @@ member_fetch_loop(Memberevent current)
}
}
client->get_event(roomid,
current.unsigned_data.replaces_state,
[](mtx::events::collections::TimelineEvents ev, RequestErr err) mutable {
if (err) {
cerr << "There was an error fetching a memberevent: ";
print_errors(err);
}
else if (auto event = std::get_if<Memberevent>(&ev)) {
member_fetch_loop(std::move(*event));
return;
}
cerr << "Event wrong type, skipping: "
<< std::visit([](auto raw) { return nlohmann::json(raw).dump(2); },
ev)
<< "\n";
std::cerr << "#";
if (members.empty())
return;
auto first = members.back();
members.pop_back();
member_fetch_loop(std::move(first));
});
client->get_event(
roomid,
current.unsigned_data.replaces_state,
[](mtx::events::collections::TimelineEvents ev, RequestErr err) mutable {
if (err) {
cerr << "There was an error fetching a memberevent: ";
print_errors(err);
} else if (auto event = std::get_if<Memberevent>(&ev)) {
member_fetch_loop(std::move(*event));
return;
}
cerr << "Event wrong type, skipping: "
<< std::visit([](auto raw) { return nlohmann::json(raw).dump(2); }, ev) << "\n";
std::cerr << "#";
if (members.empty())
return;
auto first = members.back();
members.pop_back();
member_fetch_loop(std::move(first));
});
}
void
......
import pandas as pd
# Script to plot the file from memberstats
tsv_data = pd.read_csv('history.tsv', sep='\t')
tsv_data = tsv_data.sort_values(by=['timestamp'])
tsv_data["timestamp"] = pd.to_datetime(tsv_data["timestamp"], unit = 'ms')
count = 0
def inc():
global count
count += 1
return count
def dec():
global count
count -= 1
return count
tsv_data['count'] = tsv_data.apply((lambda x: inc() if x['joined'] == 'j' else dec()), axis=1)
print(tsv_data.head(20))
print(tsv_data.tail(20))
p = tsv_data.plot.line(x='timestamp', y='count')
p.get_figure().savefig('nheko_hist.png')
......@@ -26,4 +26,3 @@ void
from_json(const nlohmann::json &obj, Members &res);
}
}
......@@ -25,4 +25,3 @@ from_json(const nlohmann::json &obj, Members &res)
}
}
......@@ -286,20 +286,19 @@ TEST(ClientAPI, Members)
mtx::requests::CreateRoom req;
req.name = "Name";
req.topic = "Topic";
mtx_client->create_room(req,
[mtx_client](const mtx::responses::CreateRoom &res, RequestErr err) {
check_error(err);
ASSERT_TRUE(res.room_id.localpart().size() > 10);
EXPECT_EQ(res.room_id.hostname(), server_name());
mtx_client->members(
res.room_id.to_string(),
[](const mtx::responses::Members &res, RequestErr err) {
check_error(err);
ASSERT_EQ(res.chunk.size(), 1);
EXPECT_EQ(res.chunk[0].state_key, "@alice:" + server_name());
});
});
mtx_client->create_room(
req, [mtx_client](const mtx::responses::CreateRoom &res, RequestErr err) {
check_error(err);
ASSERT_TRUE(res.room_id.localpart().size() > 10);
EXPECT_EQ(res.room_id.hostname(), server_name());
mtx_client->members(res.room_id.to_string(),
[](const mtx::responses::Members &res, RequestErr err) {
check_error(err);
ASSERT_EQ(res.chunk.size(), 1);
EXPECT_EQ(res.chunk[0].state_key, "@alice:" + server_name());
});
});
mtx_client->close();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment