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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
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;
}