OpenM++ runtime library (libopenm)
metaLoader.h
Go to the documentation of this file.
1 
5 // Copyright (c) 2013-2015 OpenM++
6 // This code is licensed under the MIT license (see LICENSE.txt for details)
7 
8 #ifndef META_LOADER_H
9 #define META_LOADER_H
10 
11 #include <algorithm>
12 using namespace std;
13 
15 #include "msg.h"
16 
17 namespace openm
18 {
21  {
23  static constexpr const char * subValueCount = "OpenM.SubValues";
24 
26  static constexpr const char * runName = "OpenM.RunName";
27 
29  static constexpr const char * runId = "OpenM.RunId";
30 
32  static constexpr const char * runCreated = "OpenM.RunCreated";
33 
35  static constexpr const char * restartRunId = "OpenM.RestartRunId";
36 
38  static constexpr const char * setId = "OpenM.SetId";
39 
41  static constexpr const char * setName = "OpenM.SetName";
42 
44  static constexpr const char * baseRunName = "OpenM.BaseRunName";
45 
47  static constexpr const char * baseRunId = "OpenM.BaseRunId";
48 
50  static constexpr const char * baseRunDigest = "OpenM.BaseRunDigest";
51 
53  static constexpr const char * taskId = "OpenM.TaskId";
54 
56  static constexpr const char * taskName = "OpenM.TaskName";
57 
59  static constexpr const char * taskRunName = "OpenM.TaskRunName";
60 
62  static constexpr const char * taskRunId = "OpenM.TaskRunId";
63 
65  static constexpr const char * taskWait = "OpenM.TaskWait";
66 
68  static constexpr const char * profile = "OpenM.Profile";
69 
71  static constexpr const char * threadCount = "OpenM.Threads";
72 
74  static constexpr const char * notOnRoot = "OpenM.NotOnRoot";
75 
77  static constexpr const char * dbConnStr = "OpenM.Database";
78 
80  static constexpr const char * useSparse = "OpenM.SparseOutput";
81 
83  static constexpr const char * sparseNull = "OpenM.SparseNullValue";
84 
86  static constexpr const char * doubleFormat = "OpenM.DoubleFormat";
87 
89  static constexpr const char * paramDir = "OpenM.ParamDir";
90 
92  static constexpr const char * useIdCsv = "OpenM.IdCsv";
93 
95  static constexpr const char * useIdParamValue = "OpenM.IdParameterValue";
96 
98  static constexpr const char * progressPercent = "OpenM.ProgressPercent";
99 
101  static constexpr const char * progressStep = "OpenM.ProgressStep";
102 
104  static constexpr const char * parameterPrefix = "Parameter";
105 
107  static constexpr const char * subFromPrefix = "SubFrom";
108 
110  static constexpr const char * subValuesPrefix = "SubValues";
111 
113  static constexpr const char * tableSuppress = "Tables.Suppress";
114 
116  static constexpr const char * tableRetain = "Tables.Retain";
117 
119  static constexpr const char * microdataToDb = "Microdata.ToDb";
120 
122  static constexpr const char * microdataToCsv = "Microdata.ToCsv";
123 
125  static constexpr const char * microdataToTrace = "Microdata.ToTrace";
126 
128  static constexpr const char * microdataCsvDir = "Microdata.CsvDir";
129 
131  static constexpr const char* microdataAll = "Microdata.All";
132 
134  static constexpr const char * microdataInternal = "Microdata.UseInternal";
135 
137  static constexpr const char * microdataEvents = "Microdata.Events";
138 
140  static constexpr const char * microdataEventColumn = "Microdata.CsvEventColumn";
141 
143  static constexpr const char* microdataPrefix = "Microdata";
144 
146  // static constexpr const char* microdataFilterPrefix = "MicrodataFilter";
147 
149  static constexpr const char * importAll = "Import.All";
150 
152  static constexpr const char * importPrefix = "Import";
153 
155  static constexpr const char * importRunDigestPrefix = "ImportRunDigest";
156 
158  static constexpr const char * importRunIdPrefix = "ImportRunId";
159 
161  static constexpr const char * importRunNamePrefix = "ImportRunName";
162 
164  static constexpr const char * importModelDigestPrefix = "ImportModelDigest";
165 
167  static constexpr const char * importModelIdPrefix = "ImportModelId";
168 
170  static constexpr const char * importExprPrefix = "ImportExpr";
171 
173  static constexpr const char * importDbPrefix = "ImportDb";
174 
176  static constexpr const char * runDescrSuffix = "RunDescription";
177 
179  static constexpr const char * runNotePathSuffix = "RunNotesPath";
180 
182  static constexpr const char * traceToConsole = "OpenM.TraceToConsole";
183 
185  static constexpr const char * traceToFile = "OpenM.TraceToFile";
186 
188  static constexpr const char * traceFilePath = "OpenM.TraceFilePath";
189 
191  static constexpr const char * traceToStamped = "OpenM.TraceToStampedFile";
192 
194  static constexpr const char * traceUseTs = "OpenM.TraceUseTimeStamp";
195 
197  static constexpr const char * traceUsePid = "OpenM.TraceUsePidStamp";
198 
200  static constexpr const char * traceNoMsgTime = "OpenM.TraceNoMsgTime";
201 
203  static constexpr const char * traceRank = "OpenM.TraceRank";
204 
206  static constexpr const char * logRank = "OpenM.LogRank";
207 
209  static constexpr const char * messageLang = "OpenM.MessageLanguage";
210 
212  static constexpr const char * dbSubValue = "db";
213 
215  static constexpr const char * iotaSubValue = "iota";
216 
218  static constexpr const char * csvSubValue = "csv";
219 
221  static constexpr const char * defaultValue = "default";
222 
224  static constexpr const char * allValue = "All";
225  };
226 
228  struct RunShortKey
229  {
231  static constexpr const char * iniFile = "ini";
232 
234  static constexpr const char * setName = "s";
235 
237  static constexpr const char * paramDir = "p";
238  };
239 
242  {
243  public:
245  virtual ~MetaLoader(void) noexcept = 0;
246 
249 
252 
254  const ArgReader & argOpts(void) const { return argStore; }
255 
257  const MetaHolder * meta(void) const { return metaStore.get(); }
258 
260  const RunOptions modelRunOptions(int i_subCount, int i_subId) const;
261 
263  static const ArgReader getRunOptions(int argc, char ** argv);
264 
266  int parameterSubCount(int i_paramId) const
267  {
268  return binary_search(paramIdSubArr.cbegin(), paramIdSubArr.cend(), i_paramId) ? subValueCount : 1;
269  }
270 
272  int parameterIdByName(const char * i_name) const;
273 
275  int tableIdByName(const char * i_name) const;
276 
278  bool isSuppressed(const char * i_name) const { return isSuppressed(tableIdByName(i_name)); }
279 
281  bool isSuppressed(int i_tableId) const
282  {
283  return binary_search(tableIdSuppressArr.cbegin(), tableIdSuppressArr.cend(), i_tableId);
284  }
285 
286  protected:
287  int modelId; // model id in database
288  unique_ptr<MetaHolder> metaStore; // metadata tables
289  vector<int> paramIdSubArr; // ids of parameters where sub-values count same as model run sub-values count
290  vector<int> tableIdSuppressArr; // id's of tables to suppress from calculation and output
291  vector<int> entityIdxArr; // microdata attributes indices in EntityNameSizeArr
292  bool isCsvEventColumn; // if true then write even names into entity microdata CSV
293  vector<bool> entityUseEvents; // microdata event filter: if this array[event id] is true then use this event
294 
296  MetaLoader(const ArgReader & i_argStore) :
297  subValueCount(0),
298  threadCount(1),
299  modelId(0),
300  isCsvEventColumn(false),
301  argStore(i_argStore)
302  { }
303 
305  const RunOptions & modelRunOptions(void) const { return baseRunOpts; }
306 
308  void setRunOptions(const RunOptions & i_opts) { baseRunOpts = i_opts; }
309 
310  // read metadata tables from db, except of run_option table
311  static int readMetaTables(IDbExec * i_dbExec, MetaHolder * io_metaStore, const char * i_name, const char * i_digest);
312 
318  void loadMessages(IDbExec * i_dbExec);
319 
321  void mergeOptions(IDbExec * i_dbExec);
322 
323  // enum to indicate what kind of sub id's selected: single, default, range or list
324  enum class KindSubIds : int
325  {
326  none = 0, // SubValues option not defined
327  single = 1, // single sub id
328  defaultId = 2, // "default" single sub id
329  range =3, // range of sub id's [first id, last id]
330  list = 4 // list of sub id's
331  };
332 
333  // enum to indicate where to get sub-values of input parameter: database input workset, csv file or generate iota
334  enum class FromSub : int
335  {
336  defaultValue = 0, // SubFrom option not defined
337  db = 1, // sub values from database input workset
338  csv = 2, // sub values from csv file
339  iota = 3 // generate iota sub values
340  };
341 
342  // parameter sub-values options:
343  // SubFrom: get sub-values from "db", "iota" or "csv"
344  // SubValues: can be list of id's: 1,2,3,4 or range: [1,4] or mask: x0F or single id: 7 or default id: "default"
346  {
347  int subCount = 1; // number of sub-values
348  KindSubIds kind = KindSubIds::none; // is it a single sub id, range or list of id's
349  vector<int> subIds; // list of sub id's to use, if not default id
350  FromSub from = FromSub::defaultValue; // get sub-values from: "db", "iota" or "csv"
351  };
352 
353  map<int, ParamSubOpts> subOptsMap; // map parameter id to sub-values options
354 
355  // enum to indicate how to find source model run for import
356  enum class ImportKind : int
357  {
358  none = 0, // no import
359  modelName = 1, // use model name: last run id of model with that name
360  modelId = 2, // use model id: last run id of that model id
361  modelDigest = 3, // use model digest: last run id of that model digest
362  runName = 4, // use run name: last run id with that name
363  runId = 5, // use run id
364  runDigest = 6 // use run digest
365  };
366 
367  // import options for each model run
368  struct ImportOpts {
369  ImportKind kind = ImportKind::none;
370  int modelId = 0; // source model id
371  string modelDigest; // source model digest
372  int runId = 0; // source run id
373  string runName; // source run name
374  string runDigest; // source run digest
375  string connectionStr; // if not empty then db connection string
376  };
377  map<string, ImportOpts> importOptsMap; // import options for each model name
378 
379  // import source for each model run: run id and digest, model id and digest
380  struct RunImportOpts {
381  int runId = 0; // source run id
382  string runDigest; // source run digest
383  int modelId = 0; // source model id
384  string modelDigest; // source model digest
385  unique_ptr<MetaHolder> meta; // metadata rows: source model, parameters and output tables to import from
386  unique_ptr<IDbExec> dbExec; // database connection, if null then use "main" database connection
387  };
388 
389  // import options for parameter
391  string expr; // output table expression name to import as parameter value
392  };
393  map<int, ParamImportOpts> paramImportOptsMap; // parameter id mapped to import options
394 
395  // model run language-specific options: map language id to run description and notes
396  map<int, pair<string, string> > langOptsMap;
397 
398  private:
399  RunOptions baseRunOpts; // basic model run options
400  ArgReader argStore; // arguments as key-value string pairs with case-neutral search
401 
402  // merge parameter name arguments with profile_option table, ie "Parameter.Age" or "SubValues.Age" argument
403  void mergeParameterProfile(
404  const string & i_profileName, const char * i_prefix, const IProfileOptionTable * i_profileOpt, const vector<ParamDicRow> & i_paramRs
405  );
406 
408  void parseParamSubOpts(void);
409 
411  void parseImportOptions(void);
412 
414  void parseSuppressOptions(void);
415 
417  void parseLangOptions(void);
418 
420  void parseEntityOptions(void);
421 
423  tuple<bool, string, const EntityDicRow *> parseEntityNameOption(const string & i_key, const string & i_metadataPrefix) const;
424 
425  private:
426  MetaLoader(const MetaLoader & i_metaLoader) = delete;
427  MetaLoader & operator=(const MetaLoader & i_metaLoader) = delete;
428  };
429 }
430 
431 #endif // META_LOADER_H
OpenM++ arguments reader: parse command line and ini-file arguments.
database connection wrapper to execute sql commands.
Definition: dbExec.h:21
model metadata loader: read and broadcast metadata and run options.
Definition: metaLoader.h:242
int threadCount
max number of modeling threads
Definition: metaLoader.h:251
int parameterSubCount(int i_paramId) const
return sub-values count by parameter id
Definition: metaLoader.h:266
bool isSuppressed(const char *i_name) const
check by name if output table suppressed
Definition: metaLoader.h:278
int subValueCount
total number of sub-values
Definition: metaLoader.h:248
MetaLoader(const ArgReader &i_argStore)
create metadata loader.
Definition: metaLoader.h:296
void setRunOptions(const RunOptions &i_opts)
set basic model run options
Definition: metaLoader.h:308
const RunOptions & modelRunOptions(void) const
return basic model run options
Definition: metaLoader.h:305
bool isSuppressed(int i_tableId) const
check by id if output table suppressed
Definition: metaLoader.h:281
const ArgReader & argOpts(void) const
arguments from command line and ini-file
Definition: metaLoader.h:254
const MetaHolder * meta(void) const
model metadata tables
Definition: metaLoader.h:257
OpenM++: message passing library public interface.
openM++ namespace
Definition: log.h:32
arguments reader to get runtime arguments from command line and ini-file.
Definition: argReader.h:56
profile_option table public interface.
Definition: dbMetaTable.h:867
Holder for model metadata core part (not include model text).
Definition: metaHolder.h:20
Definition: metaLoader.h:368
Definition: metaLoader.h:390
Definition: metaLoader.h:346
Definition: metaLoader.h:380
basic model run options
Definition: omModel.h:26
keys for model run options
Definition: metaLoader.h:21
keys for model run options (short form)
Definition: metaLoader.h:229