From c03d01ebd66ae3eeed4cce4baa3e6e7cdb07e73d Mon Sep 17 00:00:00 2001 From: onefang Date: Thu, 9 Sep 2021 17:30:46 +1000 Subject: If there's no sims, don't bother calculating area of all sims. --- src/sledjchisl/sledjchisl.c | 86 ++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/src/sledjchisl/sledjchisl.c b/src/sledjchisl/sledjchisl.c index 9ed7ba1..d18c73e 100644 --- a/src/sledjchisl/sledjchisl.c +++ b/src/sledjchisl/sledjchisl.c @@ -4015,56 +4015,62 @@ gridStats *getStats(MYSQL *db, gridStats *stats) replaceLong(stats->stats, "day60", HGin); replaceLong(stats->stats, "HGday60", HGin - locIn); + my_ulonglong sims = dbCount("regions", NULL); // Collect stats about sims. - replaceLong(stats->stats, "sims", dbCount("regions", NULL)); + replaceLong(stats->stats, "sims", sims); replaceLong(stats->stats, "onlineSims", dbCount("regions", "sizeX != 0")); replaceLong(stats->stats, "varRegions", dbCount("regions", "sizeX > 256 or sizeY > 256")); replaceLong(stats->stats, "singleSims", dbCount("regions", "sizeX = 256 and sizeY = 256")); replaceLong(stats->stats, "offlineSims", dbCount("regions", "sizeX = 0")); - // Calculate total size of all regions. - my_ulonglong simSize = 0; - static dbRequest *rgnSizes = NULL; - if (NULL == rgnSizes) + if (0 < sims) { - static char *szi[] = {NULL}; - static char *szo[] = {"sizeX", "sizeY", NULL}; - rgnSizes = xzalloc(sizeof(dbRequest)); - rgnSizes->table = "regions"; - rgnSizes->inParams = szi; - rgnSizes->outParams = szo; - rgnSizes->where = "sizeX != 0"; - dbRequests->addfirst(dbRequests, &rgnSizes, sizeof(dbRequest *)); - } - dbDoSomething(rgnSizes, FALSE); // LEAKY - rowData *rows = rgnSizes->rows; + // Calculate total size of all regions. + my_ulonglong simSize = 0; + static dbRequest *rgnSizes = NULL; + if (NULL == rgnSizes) + { + static char *szi[] = {NULL}; + static char *szo[] = {"sizeX", "sizeY", NULL}; + rgnSizes = xzalloc(sizeof(dbRequest)); + rgnSizes->table = "regions"; + rgnSizes->inParams = szi; + rgnSizes->outParams = szo; + rgnSizes->where = "sizeX != 0"; + dbRequests->addfirst(dbRequests, &rgnSizes, sizeof(dbRequest *)); + } + dbDoSomething(rgnSizes, FALSE); // LEAKY + rowData *rows = rgnSizes->rows; - qhashtbl_t *row; - while (NULL != (row = rows->rows->getat(rows->rows, 0, NULL, true))) - { - my_ulonglong x = 0, y = 0; + qhashtbl_t *row; + while (NULL != (row = rows->rows->getat(rows->rows, 0, NULL, true))) + { + my_ulonglong x = 0, y = 0; - tmp = row->getstr(row, "sizeX", false); - if (NULL == tmp) - E("No regions.sizeX!"); - else - x = atoll(tmp); - tmp = row->getstr(row, "sizeY", false); - if (NULL == tmp) - E("No regions.sizeY!"); - else - y = atoll(tmp); - simSize += x * y; - row->free(row); - rows->rows->removefirst(rows->rows); - } - free(rows->fieldNames); - rows->rows->free(rows->rows); - free(rows); + tmp = row->getstr(row, "sizeX", false); + if (NULL == tmp) + E("No regions.sizeX!"); + else + x = atoll(tmp); + tmp = row->getstr(row, "sizeY", false); + if (NULL == tmp) + E("No regions.sizeY!"); + else + y = atoll(tmp); + simSize += x * y; + row->free(row); + rows->rows->removefirst(rows->rows); + } + free(rows->fieldNames); + rows->rows->free(rows->rows); + free(rows); - tmp = xmprintf("%lu", simSize); - stats->stats->putstr(stats->stats, "simsSize", tmp); - free(tmp); + tmp = xmprintf("%lu", simSize); + stats->stats->putstr(stats->stats, "simsSize", tmp); + free(tmp); + } + else + stats->stats->putstr(stats->stats, "simsSize", "0"); gettimeofday(&(stats->last), NULL); return stats; -- cgit v1.1