From 1d07a9e6ebb4d88fdf8ff0f93bdb89f0641101c7 Mon Sep 17 00:00:00 2001
From: "pavel.uhanov" <pavel.uhanov@demlabs.net>
Date: Mon, 8 Jul 2024 13:04:32 +0000
Subject: [PATCH] support-11005

---
 dap-sdk                                   |  2 +-
 modules/net/dap_chain_ledger.c            |  8 +++----
 modules/net/dap_chain_net.c               |  4 +---
 modules/net/dap_chain_node.c              | 28 +++++++++++++++++++++++
 modules/net/include/dap_chain_ledger.h    |  2 +-
 modules/type/blocks/dap_chain_cs_blocks.c |  7 +++++-
 6 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/dap-sdk b/dap-sdk
index 634bf59c2a..95eff772b4 160000
--- a/dap-sdk
+++ b/dap-sdk
@@ -1 +1 @@
-Subproject commit 634bf59c2a94a7dec82fcd9304e2f160b3419c45
+Subproject commit 95eff772b40056a7fab20438556257ee1ac7bd78
diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c
index feb006a659..36c08bc8e9 100644
--- a/modules/net/dap_chain_ledger.c
+++ b/modules/net/dap_chain_ledger.c
@@ -5608,7 +5608,7 @@ unsigned dap_ledger_count(dap_ledger_t *a_ledger)
  * @param a_ts_to
  * @return
  */
-uint64_t dap_ledger_count_from_to(dap_ledger_t * a_ledger, dap_time_t a_ts_from, dap_time_t a_ts_to)
+uint64_t dap_ledger_count_from_to(dap_ledger_t * a_ledger, dap_nanotime_t a_ts_from, dap_nanotime_t a_ts_to)
 {
     uint64_t l_ret = 0;
     dap_ledger_private_t *l_ledger_pvt = PVT(a_ledger);
@@ -5616,17 +5616,17 @@ uint64_t dap_ledger_count_from_to(dap_ledger_t * a_ledger, dap_time_t a_ts_from,
     pthread_rwlock_rdlock(&l_ledger_pvt->ledger_rwlock);
     if ( a_ts_from && a_ts_to) {
         HASH_ITER(hh, l_ledger_pvt->ledger_items , l_iter_current, l_item_tmp){
-            if ( l_iter_current->tx->header.ts_created >= a_ts_from && l_iter_current->tx->header.ts_created <= a_ts_to )
+            if ( l_iter_current->ts_added >= a_ts_from && l_iter_current->ts_added <= a_ts_to )
                 l_ret++;
         }
     } else if ( a_ts_to ){
         HASH_ITER(hh, l_ledger_pvt->ledger_items , l_iter_current, l_item_tmp){
-            if ( l_iter_current->tx->header.ts_created <= a_ts_to )
+            if ( l_iter_current->ts_added <= a_ts_to )
                 l_ret++;
         }
     } else if ( a_ts_from ){
         HASH_ITER(hh, l_ledger_pvt->ledger_items , l_iter_current, l_item_tmp){
-            if ( l_iter_current->tx->header.ts_created >= a_ts_from )
+            if ( l_iter_current->ts_added >= a_ts_from )
                 l_ret++;
         }
     } else {
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 1dc2e92778..f3ebff86c0 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1199,8 +1199,6 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 time_t l_from_ts = mktime(&l_from_tm);
                 time_t l_to_ts = mktime(&l_to_tm);
                 // Produce strings
-                char l_from_str_new[50];
-                char l_to_str_new[50];
                 strftime(l_from_str_new, sizeof(l_from_str_new), c_time_fmt,&l_from_tm );
                 strftime(l_to_str_new, sizeof(l_to_str_new), c_time_fmt,&l_to_tm );
                 json_object *l_jobj_stats = json_object_new_object();
@@ -1222,7 +1220,7 @@ static int s_cli_net(int argc, char **argv, void **reply)
                 json_object_object_add(l_jobj_stats, "from", l_jobj_from);
                 json_object_object_add(l_jobj_stats, "to", l_jobj_to);
                 log_it(L_INFO, "Calc TPS from %s to %s", l_from_str_new, l_to_str_new);
-                uint64_t l_tx_count = dap_ledger_count_from_to ( l_net->pub.ledger, l_from_ts, l_to_ts);
+                uint64_t l_tx_count = dap_ledger_count_from_to ( l_net->pub.ledger, l_from_ts * 1000000000, l_to_ts * 1000000000);
                 long double l_tpd = l_to_ts == l_from_ts ? 0 :
                                                      (long double) l_tx_count / (long double) ((long double)(l_to_ts - l_from_ts) / 86400);
                 char *l_tpd_str = dap_strdup_printf("%.3Lf", l_tpd);
diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c
index f48a4fcce0..3ab907653d 100644
--- a/modules/net/dap_chain_node.c
+++ b/modules/net/dap_chain_node.c
@@ -290,10 +290,38 @@ void dap_chain_node_mempool_process_all(dap_chain_t *a_chain, bool a_force)
     dap_chain_net_t *l_net = dap_chain_net_by_id(a_chain->net_id);
     if (!a_force && !l_net->pub.mempool_autoproc)
         return;
+#ifdef DAP_TPS_TEST
+    FILE *l_file = fopen("/opt/cellframe-node/share/ca/mempool_start.txt", "r");
+    if (l_file) {
+        fclose(l_file);
+        l_file = fopen("/opt/cellframe-node/share/ca/mempool_finish.txt", "r");
+        if(!l_file) {
+            log_it(L_TPS, "Wait mempool");
+            return;
+        }
+        log_it(L_TPS, "Mempool ready");
+        fclose(l_file);
+        l_file = fopen("/opt/cellframe-node/share/ca/tps_start.txt", "r");
+        if (!l_file) {
+            l_file = fopen("/opt/cellframe-node/share/ca/tps_start.txt", "w");
+            char l_from_str[50];
+            const char c_time_fmt[]="%Y-%m-%d_%H:%M:%S";
+            struct tm l_from_tm = {};
+            time_t l_ts_now = time(NULL);
+            localtime_r(&l_ts_now, &l_from_tm);
+            strftime(l_from_str, sizeof(l_from_str), c_time_fmt, &l_from_tm);
+            fputs(l_from_str, l_file);
+        }
+        fclose(l_file);
+    }
+#endif
     char *l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(a_chain);
     size_t l_objs_size = 0;
     dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_gdb_group_mempool, &l_objs_size);
     if (l_objs_size) {
+#ifdef DAP_TPS_TEST
+        log_it(L_TPS, "Get %zu datums from mempool", l_objs_size);
+#endif
         for (size_t i = 0; i < l_objs_size; i++) {
             if (!l_objs[i].value_len)
                 continue;
diff --git a/modules/net/include/dap_chain_ledger.h b/modules/net/include/dap_chain_ledger.h
index e6d04d4ad2..9e6ff60313 100644
--- a/modules/net/include/dap_chain_ledger.h
+++ b/modules/net/include/dap_chain_ledger.h
@@ -338,7 +338,7 @@ void dap_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db);
  * Return number transactions from the cache
  */
 unsigned dap_ledger_count(dap_ledger_t *a_ledger);
-uint64_t dap_ledger_count_from_to(dap_ledger_t * a_ledger, dap_time_t a_ts_from, dap_time_t a_ts_to);
+uint64_t dap_ledger_count_from_to(dap_ledger_t * a_ledger, dap_nanotime_t a_ts_from, dap_nanotime_t a_ts_to);
 
 /**
  * Check whether used 'out' items
diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c
index 977a85e400..ec33832dbd 100644
--- a/modules/type/blocks/dap_chain_cs_blocks.c
+++ b/modules/type/blocks/dap_chain_cs_blocks.c
@@ -2241,6 +2241,9 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_
 
     size_t l_datum_processed = 0;
     pthread_rwlock_wrlock(&l_blocks_pvt->rwlock);
+#ifdef DAP_TPS_TEST
+    log_it(L_TPS, "Start tps %zu datums add", a_datums_count);
+#endif
     for (size_t i = 0; i < a_datums_count; ++i) {
         dap_chain_datum_t *l_datum = a_datums[i];
         size_t l_datum_size = dap_chain_datum_size(l_datum);
@@ -2259,10 +2262,12 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_
             l_blocks->block_new->hdr.cell_id.uint64 = a_chain->cells->id.uint64;
             l_blocks->block_new->hdr.chain_id.uint64 = l_blocks->chain->id.uint64;
         }
-
         l_blocks->block_new_size = dap_chain_block_datum_add(&l_blocks->block_new, l_blocks->block_new_size, l_datum, l_datum_size);
         l_datum_processed++;
     }
+#ifdef DAP_TPS_TEST
+    log_it(L_TPS, "Finish tps %zu datums add", a_datums_count);
+#endif
     pthread_rwlock_unlock(&l_blocks_pvt->rwlock);
     return l_datum_processed;
 }
-- 
GitLab