aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/bsc_hack.c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2009-12-23 05:29:04 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2009-12-23 05:30:47 +0100
commit079353ad1f894853b80cda4db8ee0ce08d682b28 (patch)
tree7200885f3bec2262ad6bb6ce32dfea37f2c31c62 /openbsc/src/bsc_hack.c
parent6fced2fd0a0065249265b6f4a53acd925c2e0f09 (diff)
[statistics] Do the syncing to db from within the bsc_hack
Change the counters_store_db function to be a generic for_each function taking a function pointer and data. Use that in bsc_hack to store it to the DB. This is removing the DB requirement and will allow to handle the counter values in different ways without making the counter list public. I verified that the syncing is still taking place.
Diffstat (limited to 'openbsc/src/bsc_hack.c')
-rw-r--r--openbsc/src/bsc_hack.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/openbsc/src/bsc_hack.c b/openbsc/src/bsc_hack.c
index 0d20d43d3..8792cc36c 100644
--- a/openbsc/src/bsc_hack.c
+++ b/openbsc/src/bsc_hack.c
@@ -43,6 +43,11 @@ struct gsm_network *bsc_gsmnet = 0;
static const char *database_name = "hlr.sqlite3";
static const char *config_file = "openbsc.cfg";
+
+/* timer to store statistics */
+#define DB_SYNC_INTERVAL 60, 0
+static struct timer_list db_sync_timer;
+
extern int bsc_bootstrap_network(int (*mmc_rev)(struct gsm_network *, int, void *),
const char *cfg_file);
extern int bsc_shutdown_net(struct gsm_network *net);
@@ -155,6 +160,19 @@ static void signal_handler(int signal)
}
}
+/* timer handling */
+static int _db_store_counter(struct counter *counter, void *data)
+{
+ return db_store_counter(counter);
+}
+
+static void db_sync_timer_cb(void *data)
+{
+ /* store counters to database and re-schedule */
+ counters_for_each(_db_store_counter, NULL);
+ bsc_schedule_timer(&db_sync_timer, DB_SYNC_INTERVAL);
+}
+
int main(int argc, char **argv)
{
int rc;
@@ -189,6 +207,11 @@ int main(int argc, char **argv)
}
printf("DB: Database prepared.\n");
+ /* setup the timer */
+ db_sync_timer.cb = db_sync_timer_cb;
+ db_sync_timer.data = NULL;
+ bsc_schedule_timer(&db_sync_timer, DB_SYNC_INTERVAL);
+
rc = bsc_bootstrap_network(mncc_recv, config_file);
if (rc < 0)
exit(1);