int main (int argc, char **argv) { kogmo_rtdb_handle_t *dbc; kogmo_rtdb_connect_info_t dbinfo; kogmo_rtdb_obj_info_t myobj_info; myobj_t myobj; kogmo_rtdb_objid_t oid; int err, i, loops; kogmo_timestamp_t ts_start,ts_stop; int size = 1024; if ( argc >= 2 ) size = atoi(argv[1]); if ( size > OBJSIZE_MAX || size < SIZE_MIN ) { printf("Usage: kogmo_rtdb_ratetest [OBJSIZE]\n"); printf("Tests the maximal kogmo-rtdb commit rate.\n"); printf("OBJSIZE must be between %i and %i.\n", SIZE_MIN, OBJSIZE_MAX); exit(1); } loops = size > 1000 ? 1000000000 / size : 1000000; // Verbindung zur Datenbank aufbauen, Zykluszeit unbekannt.. :-( err = kogmo_rtdb_connect_initinfo (&dbinfo, "", "kogmo_rtdb_ratetest", 0.001); DIEonERR(err); oid = kogmo_rtdb_connect (&dbc, &dbinfo); DIEonERR(oid); // Object erstellen err = kogmo_rtdb_obj_initinfo (dbc, &myobj_info, "rate-test-object", KOGMO_RTDB_OBJTYPE_C3_TEXT, sizeof (myobj)); DIEonERR(err); myobj_info.max_cycletime = myobj_info.avg_cycletime = 0.001; myobj_info.history_interval = 0.010; // => about 10 history slots myobj_info.size_max = size; oid = kogmo_rtdb_obj_insert (dbc, &myobj_info); DIEonERR(oid); // Datenobjekt initialisieren err = kogmo_rtdb_obj_initdata (dbc, &myobj_info, &myobj); DIEonERR(err); err = kogmo_rtdb_obj_writedata (dbc, myobj_info.oid, &myobj); DIEonERR(err); while(1) { ts_start = kogmo_timestamp_now(); for(i=0;i<loops;i++) { err = kogmo_rtdb_obj_writedata (dbc, myobj_info.oid, &myobj); DIEonERR(err); } ts_stop = kogmo_timestamp_now(); double runtime = kogmo_timestamp_diff_secs ( ts_start, ts_stop ); printf("Committing %d Bytes: Time for %i loops is %f seconds => %.3f us each, %.0f per second.\n", size, loops, runtime, runtime/loops*1e6, loops/runtime); } err = kogmo_rtdb_obj_delete (dbc, &myobj_info); DIEonERR(err); err = kogmo_rtdb_disconnect (dbc, NULL); DIEonERR(err); return 0; }
int main (int argc, char **argv) { kogmo_timestamp_t ts; kogmo_timestamp_string_t tstring; int err; if ( argc > 1 ) { ts = kogmo_timestamp_from_string ( argv[1] ); if ( ts == 0 ) usage (); } else { ts = kogmo_timestamp_now (); } printf ("%lli\n", (long long int)ts); err = kogmo_timestamp_to_string (ts, tstring); if ( !err ) printf ("%s\n", tstring); return 0; }
kogmo_timestamp_t kogmo_timestamp_from_string (char *str) { kogmo_timestamp_t ts; int err; struct tm tmx; time_t secs; char ns_string[10]=""; char *ns_string_end; unsigned long int ns=0; int i; long long int lli; if ( str == NULL ) return 0; memset ( &tmx, 0, sizeof(struct tm)); ns = 0; err = sscanf ( str, "%d-%d-%d%*[ _tT]%d:%d:%d.%9s", &tmx.tm_year, &tmx.tm_mon , &tmx.tm_mday, &tmx.tm_hour, &tmx.tm_min, &tmx.tm_sec, ns_string ); // we need at least a date (time will be 00:00:00.0 then) if ( err < 3 ) { // for even more comfort, this also accepts times relative to now, // +/- followed by an offset in secondstimestamps (e.g. +12.3 or -7.25) if ( str[0] == '+' || str[0] == '-' ) { double off; err = sscanf ( str, "%lf", &off); if ( err != 1 ) return 0; ts = kogmo_timestamp_add_secs ( kogmo_timestamp_now (), off); return ts; } // for your comfort, this also accepts timestamps (>9999) err = sscanf ( str, "%lli", &lli); ts = (kogmo_timestamp_t) lli; if ( err != 1 || ts <= 9999) return 0; return ts; } // the ranges of those value are a horrible confusion, see mktime(3) tmx.tm_year -= 1900; tmx.tm_mon -= 1; tmx.tm_isdst = -1; secs = mktime (&tmx); if ( secs < 0 ) return 0; ns = strtoul(ns_string, &ns_string_end, 10); // calculate the correct decimal fraction (9 digits) // this is: ns *= pow ( 10, 9 - strlen (ns_string) ); // but prevent dependency from math-library for(i=ns_string_end-ns_string;i<9;i++) ns *= 10; ts = (kogmo_timestamp_t)ns + (kogmo_timestamp_t)secs * KOGMO_TIMESTAMP_TICKSPERSECOND; return ts; }
int kogmo_rtdb_objmeta_upd_stats (kogmo_rtdb_handle_t *db_h) { kogmo_rtdb_objid_t oid; //kogmo_rtdb_obj_info_t rtdbobj_info; kogmo_rtdb_obj_c3_rtdb_t rtdbobj; kogmo_rtdb_objid_t err; CHK_DBH("kogmo_rtdb_objmeta_upd_stats",db_h,0); oid = kogmo_rtdb_obj_searchinfo (db_h, "rtdb", KOGMO_RTDB_OBJTYPE_C3_RTDB, 0, 0, 0, NULL, 1); if (oid<0) return oid; //err = kogmo_rtdb_obj_readinfo (db_h, oid, 0, &rtdbobj_info); //if (err<0) return err; err = kogmo_rtdb_obj_readdata (db_h, oid, 0, &rtdbobj, sizeof(rtdbobj)); if (err<0) return err; rtdbobj.base.data_ts = kogmo_timestamp_now(); rtdbobj.rtdb.objects_free=db_h->localdata_p->objmeta_free; rtdbobj.rtdb.processes_free=db_h->ipc_h.shm_p->proc_free; rtdbobj.rtdb.memory_free=db_h->localdata_p -> heap_free; err = kogmo_rtdb_obj_writedata (db_h, oid, &rtdbobj); if (err<0) return err; return 0; }
int main (int argc, char **argv) { kogmo_rtdb_handle_t *dbc; kogmo_rtdb_connect_info_t dbinfo; kogmo_rtdb_obj_info_t exampleobj_info; kogmo_rtdb_obj_ExampleObj_t exampleobj; kogmo_rtdb_objid_t oid; int err, i; err = kogmo_rtdb_connect_initinfo (&dbinfo, "", "example_object_writer", 0.033); DIEonERR(err); oid = kogmo_rtdb_connect (&dbc, &dbinfo); DIEonERR(oid); err = kogmo_rtdb_obj_initinfo (dbc, &exampleobj_info, "example_object", KOGMO_RTDB_OBJTYPE_ExampleObj, sizeof (exampleobj)); DIEonERR(err); oid = kogmo_rtdb_obj_insert (dbc, &exampleobj_info); DIEonERR(oid); err = kogmo_rtdb_obj_initdata (dbc, &exampleobj_info, &exampleobj); DIEonERR(err); exampleobj.data.x = 123; exampleobj.data.y = 456; for ( i=1; ; i++ ) { exampleobj.base.data_ts = kogmo_timestamp_now(); exampleobj.data.i = i; exampleobj.data.f = 1.0/i; err = kogmo_rtdb_obj_writedata (dbc, exampleobj_info.oid, &exampleobj); DIEonERR(err); sleep (1); } err = kogmo_rtdb_obj_delete (dbc, &exampleobj_info); DIEonERR(err); err = kogmo_rtdb_disconnect (dbc, NULL); DIEonERR(err); return 0; }