mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 23:40:57 +01:00
modules/m_command: Add a room ping command.
This commit is contained in:
parent
8f0a71f677
commit
5571eefdb8
1 changed files with 103 additions and 1 deletions
|
@ -340,6 +340,12 @@ command__read(const mutable_buffer &buf,
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::pair<string_view, string_view>
|
||||||
|
command__ping__room(const mutable_buffer &buf,
|
||||||
|
const m::user &user,
|
||||||
|
const m::room &room,
|
||||||
|
const string_view &cmd);
|
||||||
|
|
||||||
std::pair<string_view, string_view>
|
std::pair<string_view, string_view>
|
||||||
command__ping(const mutable_buffer &buf,
|
command__ping(const mutable_buffer &buf,
|
||||||
const m::user &user,
|
const m::user &user,
|
||||||
|
@ -353,9 +359,19 @@ command__ping(const mutable_buffer &buf,
|
||||||
|
|
||||||
const string_view &target
|
const string_view &target
|
||||||
{
|
{
|
||||||
param.at("target")
|
param["target"]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const bool room_ping
|
||||||
|
{
|
||||||
|
!target
|
||||||
|
|| m::valid(m::id::ROOM, target)
|
||||||
|
|| m::valid(m::id::ROOM_ALIAS, target)
|
||||||
|
};
|
||||||
|
|
||||||
|
if(room_ping)
|
||||||
|
return command__ping__room(buf, user, room, cmd);
|
||||||
|
|
||||||
m::v1::version::opts opts;
|
m::v1::version::opts opts;
|
||||||
if(m::valid(m::id::USER, target))
|
if(m::valid(m::id::USER, target))
|
||||||
opts.remote = m::user::id(target).host();
|
opts.remote = m::user::id(target).host();
|
||||||
|
@ -434,6 +450,92 @@ command__ping(const mutable_buffer &buf,
|
||||||
return { view(out, buf), alt };
|
return { view(out, buf), alt };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::pair<string_view, string_view>
|
||||||
|
command__ping__room(const mutable_buffer &buf,
|
||||||
|
const m::user &user,
|
||||||
|
const m::room &room,
|
||||||
|
const string_view &cmd)
|
||||||
|
{
|
||||||
|
const params param{tokens_after(cmd, ' ', 0), " ",
|
||||||
|
{
|
||||||
|
"target"
|
||||||
|
}};
|
||||||
|
|
||||||
|
const string_view &target
|
||||||
|
{
|
||||||
|
param["target"]
|
||||||
|
};
|
||||||
|
|
||||||
|
m::feds::opts opts;
|
||||||
|
opts.op = m::feds::op::version;
|
||||||
|
opts.room_id = room.room_id;
|
||||||
|
|
||||||
|
thread_local char tmbuf[32];
|
||||||
|
std::ostringstream out;
|
||||||
|
pubsetbuf(out, buf);
|
||||||
|
|
||||||
|
util::timer timer;
|
||||||
|
size_t responses{0};
|
||||||
|
m::feds::acquire(opts, [&timer, &responses, &buf, &out]
|
||||||
|
(const auto &result)
|
||||||
|
{
|
||||||
|
++responses;
|
||||||
|
const auto time
|
||||||
|
{
|
||||||
|
timer.at<nanoseconds>()
|
||||||
|
};
|
||||||
|
|
||||||
|
const string_view sp{" "};
|
||||||
|
const string_view fg{"#e8e8e8"};
|
||||||
|
const string_view host_bg{"#181b21"};
|
||||||
|
const string_view online_bg{"#008000"};
|
||||||
|
const string_view offline_bg{"#A01810"};
|
||||||
|
const auto bg{result.eptr? offline_bg : online_bg};
|
||||||
|
const auto status{result.eptr? "FAILED " : "ONLINE"};
|
||||||
|
|
||||||
|
thread_local char tmbuf[32];
|
||||||
|
out
|
||||||
|
<< " <font color=\"" << fg << "\" data-mx-bg-color=\"" << bg << "\">"
|
||||||
|
<< " <b>"
|
||||||
|
<< sp << sp << status << sp << sp
|
||||||
|
<< " </b>"
|
||||||
|
<< " </font>"
|
||||||
|
<< " <font color=\"" << fg << "\" data-mx-bg-color=\"" << host_bg << "\">"
|
||||||
|
<< sp << sp << " " << result.origin << " " << sp
|
||||||
|
<< " </font> "
|
||||||
|
;
|
||||||
|
|
||||||
|
if(!result.eptr)
|
||||||
|
out << " <b>"
|
||||||
|
<< pretty(tmbuf, time)
|
||||||
|
<< " </b>"
|
||||||
|
<< " application layer round-trip time."
|
||||||
|
<< "<br />";
|
||||||
|
|
||||||
|
if(result.eptr)
|
||||||
|
out << "<code>"
|
||||||
|
<< what(result.eptr)
|
||||||
|
<< "</code>"
|
||||||
|
<< "<br />";
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
const string_view rich
|
||||||
|
{
|
||||||
|
view(out, buf)
|
||||||
|
};
|
||||||
|
|
||||||
|
const string_view alt{fmt::sprintf
|
||||||
|
{
|
||||||
|
buf + size(rich), "%zu responses in %s",
|
||||||
|
responses,
|
||||||
|
pretty(tmbuf, timer.at<nanoseconds>())
|
||||||
|
}};
|
||||||
|
|
||||||
|
return { view(out, buf), alt };
|
||||||
|
}
|
||||||
|
|
||||||
std::pair<string_view, string_view>
|
std::pair<string_view, string_view>
|
||||||
command__dash(const mutable_buffer &buf,
|
command__dash(const mutable_buffer &buf,
|
||||||
const m::user &user,
|
const m::user &user,
|
||||||
|
|
Loading…
Reference in a new issue