@@ -38,30 +38,32 @@ namespace overlay {
3838
3939const OverlayMemberCertificate OverlayNode::empty_certificate_{};
4040
41+ static std::string overlay_actor_name (const OverlayIdFull &overlay_id) {
42+ return PSTRING () << " overlay." << overlay_id.compute_short_id ().bits256_value ().to_hex ().substr (0 , 4 );
43+ }
44+
4145td::actor::ActorOwn<Overlay> Overlay::create_public (td::actor::ActorId<keyring::Keyring> keyring,
4246 td::actor::ActorId<adnl::Adnl> adnl,
4347 td::actor::ActorId<OverlayManager> manager,
4448 td::actor::ActorId<dht::Dht> dht_node,
4549 adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id,
4650 std::unique_ptr<Overlays::Callback> callback,
4751 OverlayPrivacyRules rules, td::string scope, OverlayOptions opts) {
48- auto R = td::actor::create_actor<OverlayImpl>(
49- " overlay" , keyring, adnl, manager, dht_node, local_id, std::move (overlay_id), OverlayType::Public,
50- std::vector<adnl::AdnlNodeIdShort>(), std::vector<PublicKeyHash>(), OverlayMemberCertificate{}, std::move (callback),
51- std::move (rules), std::move (scope), std::move (opts));
52- return td::actor::ActorOwn<Overlay>(std::move (R));
52+ return td::actor::create_actor<OverlayImpl>(
53+ overlay_actor_name (overlay_id), keyring, adnl, manager, dht_node, local_id, std::move (overlay_id),
54+ OverlayType::Public, std::vector<adnl::AdnlNodeIdShort>(), std::vector<PublicKeyHash>(),
55+ OverlayMemberCertificate{}, std::move (callback), std::move (rules), std::move (scope), std::move (opts));
5356}
5457
5558td::actor::ActorOwn<Overlay> Overlay::create_private (
5659 td::actor::ActorId<keyring::Keyring> keyring, td::actor::ActorId<adnl::Adnl> adnl,
5760 td::actor::ActorId<OverlayManager> manager, td::actor::ActorId<dht::Dht> dht_node, adnl::AdnlNodeIdShort local_id,
5861 OverlayIdFull overlay_id, std::vector<adnl::AdnlNodeIdShort> nodes, std::unique_ptr<Overlays::Callback> callback,
5962 OverlayPrivacyRules rules, std::string scope, OverlayOptions opts) {
60- auto R = td::actor::create_actor<OverlayImpl>(" overlay" , keyring, adnl, manager, dht_node, local_id,
61- std::move (overlay_id), OverlayType::FixedMemberList, std::move (nodes),
62- std::vector<PublicKeyHash>(), OverlayMemberCertificate{},
63- std::move (callback), std::move (rules), std::move (scope));
64- return td::actor::ActorOwn<Overlay>(std::move (R));
63+ return td::actor::create_actor<OverlayImpl>(
64+ overlay_actor_name (overlay_id), keyring, adnl, manager, dht_node, local_id, std::move (overlay_id),
65+ OverlayType::FixedMemberList, std::move (nodes), std::vector<PublicKeyHash>(), OverlayMemberCertificate{},
66+ std::move (callback), std::move (rules), std::move (scope));
6567}
6668
6769td::actor::ActorOwn<Overlay> Overlay::create_semiprivate (
@@ -70,11 +72,10 @@ td::actor::ActorOwn<Overlay> Overlay::create_semiprivate(
7072 OverlayIdFull overlay_id, std::vector<adnl::AdnlNodeIdShort> nodes, std::vector<PublicKeyHash> root_public_keys,
7173 OverlayMemberCertificate cert, std::unique_ptr<Overlays::Callback> callback, OverlayPrivacyRules rules,
7274 std::string scope, OverlayOptions opts) {
73- auto R = td::actor::create_actor<OverlayImpl>(
74- " overlay" , keyring, adnl, manager, dht_node, local_id, std::move (overlay_id), OverlayType::CertificatedMembers,
75- std::move (nodes), std::move (root_public_keys), std::move (cert), std::move (callback), std::move (rules),
76- std::move (scope), std::move (opts));
77- return td::actor::ActorOwn<Overlay>(std::move (R));
75+ return td::actor::create_actor<OverlayImpl>(overlay_actor_name (overlay_id), keyring, adnl, manager, dht_node,
76+ local_id, std::move (overlay_id), OverlayType::CertificatedMembers,
77+ std::move (nodes), std::move (root_public_keys), std::move (cert),
78+ std::move (callback), std::move (rules), std::move (scope), std::move (opts));
7879}
7980
8081OverlayImpl::OverlayImpl (td::actor::ActorId<keyring::Keyring> keyring, td::actor::ActorId<adnl::Adnl> adnl,
@@ -281,17 +282,12 @@ void OverlayImpl::alarm() {
281282
282283 auto SelfId = actor_id (this );
283284 iterate_all_peers ([&](const adnl::AdnlNodeIdShort &key, OverlayPeer &peer) {
284- peer.throughput_out_bytes = static_cast <td::uint32>(peer.throughput_out_bytes_ctr / t_elapsed);
285- peer.throughput_in_bytes = static_cast <td::uint32>(peer.throughput_in_bytes_ctr / t_elapsed);
286-
287- peer.throughput_out_packets = static_cast <td::uint32>(peer.throughput_out_packets_ctr / t_elapsed);
288- peer.throughput_in_packets = static_cast <td::uint32>(peer.throughput_in_packets_ctr / t_elapsed);
289-
290- peer.throughput_out_bytes_ctr = 0 ;
291- peer.throughput_in_bytes_ctr = 0 ;
292-
293- peer.throughput_out_packets_ctr = 0 ;
294- peer.throughput_in_packets_ctr = 0 ;
285+ peer.traffic = peer.traffic_ctr ;
286+ peer.traffic .normalize (t_elapsed);
287+ peer.traffic_ctr = {};
288+ peer.traffic_responses = peer.traffic_responses_ctr ;
289+ peer.traffic_responses .normalize (t_elapsed);
290+ peer.traffic_responses_ctr = {};
295291
296292 auto P = td::PromiseCreator::lambda ([SelfId, peer_id = key](td::Result<td::string> result) {
297293 result.ensure ();
@@ -300,6 +296,12 @@ void OverlayImpl::alarm() {
300296
301297 td::actor::send_closure (adnl_, &adnl::AdnlSenderInterface::get_conn_ip_str, local_id_, key, std::move (P));
302298 });
299+ total_traffic = total_traffic_ctr;
300+ total_traffic.normalize (t_elapsed);
301+ total_traffic_ctr = {};
302+ total_traffic_responses = total_traffic_responses_ctr;
303+ total_traffic_responses.normalize (t_elapsed);
304+ total_traffic_responses_ctr = {};
303305
304306 update_throughput_at_ = td::Timestamp::in (50.0 );
305307 last_throughput_update_ = td::Timestamp::now ();
@@ -691,12 +693,8 @@ void OverlayImpl::get_stats(td::Promise<tl_object_ptr<ton_api::engine_validator_
691693 iterate_all_peers ([&](const adnl::AdnlNodeIdShort &key, const OverlayPeer &peer) {
692694 auto node_obj = create_tl_object<ton_api::engine_validator_overlayStatsNode>();
693695 node_obj->adnl_id_ = key.bits256_value ();
694- node_obj->t_out_bytes_ = peer.throughput_out_bytes ;
695- node_obj->t_in_bytes_ = peer.throughput_in_bytes ;
696-
697- node_obj->t_out_pckts_ = peer.throughput_out_packets ;
698- node_obj->t_in_pckts_ = peer.throughput_in_packets ;
699-
696+ node_obj->traffic_ = peer.traffic .tl ();
697+ node_obj->traffic_responses_ = peer.traffic_responses .tl ();
700698 node_obj->ip_addr_ = peer.ip_addr_str ;
701699
702700 node_obj->last_in_query_ = static_cast <td::uint32>(peer.last_in_query_at .at_unix ());
@@ -712,6 +710,8 @@ void OverlayImpl::get_stats(td::Promise<tl_object_ptr<ton_api::engine_validator_
712710 res->nodes_ .push_back (std::move (node_obj));
713711 });
714712
713+ res->total_traffic_ = total_traffic.tl ();
714+ res->total_traffic_responses_ = total_traffic_responses.tl ();
715715 res->stats_ .push_back (
716716 create_tl_object<ton_api::engine_validator_oneStat>(" neighbours_cnt" , PSTRING () << neighbours_cnt ()));
717717
@@ -732,6 +732,27 @@ bool OverlayImpl::has_valid_broadcast_certificate(const PublicKeyHash &source, s
732732 BroadcastCheckResult::Forbidden;
733733}
734734
735+ void TrafficStats::add_packet (td::uint64 size, bool in) {
736+ if (in) {
737+ ++in_packets;
738+ in_bytes += size;
739+ } else {
740+ ++out_packets;
741+ out_bytes += size;
742+ }
743+ }
744+
745+ void TrafficStats::normalize (double elapsed) {
746+ out_bytes = static_cast <td::uint64>(out_bytes / elapsed);
747+ in_bytes = static_cast <td::uint64>(in_bytes / elapsed);
748+ out_packets = static_cast <td::uint32>(out_packets / elapsed);
749+ in_packets = static_cast <td::uint32>(in_packets / elapsed);
750+ }
751+
752+ tl_object_ptr<ton_api::engine_validator_overlayStatsTraffic> TrafficStats::tl () const {
753+ return create_tl_object<ton_api::engine_validator_overlayStatsTraffic>(out_bytes, in_bytes, out_packets, in_packets);
754+ }
755+
735756} // namespace overlay
736757
737758} // namespace ton
0 commit comments