Input Scanner
Scan input source code/binary files to produces symbol files from a variety of programming languages, text and binary formats using configurable scanner modules.
Scanner modules parse the contents of a target input file to generate an AST from which to capture symbol values and the context in which they appear (e.g., class, function, printout).
The run pipeline utilizes symbol files to transform input log/trace events into typed TenXObjects.
Once scanner modules complete, the compile pipeline links symbol files into a single symbol library file for use at run time.
Output
Scanners emit information captured from each input into a respective symbol unit (.json) file. The path of each output symbol unit within outputSymbolFolder matches its folder structure within inputPaths
For example, when launching a compile pipeline with the following config:
For a foo.js file located in:
~/dev/app/foo.js
The respective output symbol unit output file is:
~/symbols/app/foo.js.10x.json
Parallel Processing
The compile pipeline supports running multiple instances of the compiler app in parallel by using shared file locks to safely reuse existing symbol unit files residing in the output path. The underlying storage system must support advisory locks for parallel execution to be enabled.
A separate scheduled task periodically can link symbol unit files into a single symbol library artifact used by edge/cloud apps at runtime.
Modules
-
ANTLR Scanner
Extract symbols from any programming language using the ANTLR framework.
-
JavaParser Scanner
Scan Java source code for symbol values using the JavaParser library.
-
CPython AST Scanner
Scan Python source code for symbol values.
-
JVM Bytecode Scanner
Scan JVM .class files for symbol values.
-
Scalameta Scanner
Scan Java source code for symbol values using the Scalameta library.
-
Executable Scanners
Launch a target process from which to read symbol values via its stdout.
-
Text File Scanners
Scan text/binary files for symbol values using the Jackson library.
-
Regex Pattern Scanners
Extract symbol values from a files using regular expressions.
-
Archive Scanner
Scan compressed archives for enclosed files containing symbol values.
-
Symbol Unit Scanner
Discover existing symbol unit files to reuse.
-
Log Method/stream Definitions
Define logger method and output stream names.
Configuration
To configure the Input Scanner unit, Edit these settings:
Scan
Scan
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
Below is the default configuration from: scanners/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaW5wdXRQYXRocyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnB1dCBmb2xkZXJzIHRvIHNjYW5cblxuUHJvdmlkZXMgYSBsaXN0IG9mIGZvbGRlcnMgdGhhdCBhcmUgdHJhdmVyc2VkIGluIHNlYXJjaCBvZiBzb3VyY2UgY29kZSAoZS5nLiAuanMsIC5jcHApLCBiaW5hcnkgKGUuZy4sIC5zbywgLmphciwgLnppcCkgYW5kIHRleHQgKGUuZy4sIC5qc29uLCAueG1sKSBmaWxlcyB0byBjYXB0dXJlIHN5bWJvbCB2YWx1ZXMgZnJvbSBhbmQgb3V0cHV0IHRvIHN5bWJvbCB1bml0IGZpbGVzLiBJbnB1dCBmb2xkZXJzIG1heSBjb250YWluIGZpbGVzIGFuZCBmb2xkZXJzIHB1bGxlZCBmcm9tIFtHaXRIdWJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2dpdGh1Yi8pIG9yICBhbmQgW0FydGlmYWN0b3J5XShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvYXJ0aWZhY3RvcnkpLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJvdXRwdXRTeW1ib2xGb2xkZXIiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2NhdGlvbiBvZiBvdXRwdXQgc3ltYm9sIGZvbGRlclxuXG5TcGVjaWZpZXMgdGhlIHJvb3QgZm9sZGVyIGluIHdoaWNoIHRvIHdyaXRlIG91dHB1dCBzeW1ib2wgdW5pdCBmaWxlcy4gVGhpcyBjb21waWxlciBbc2NhbiBwaGFzZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vKSBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykgYXJndW1lbnQsIHBsYWNpbmcgZWFjaCBvdXRwdXQgc3ltYm9sIHVuaXQgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcGF0aCB1bmRlciBbb3V0cHV0U3ltYm9sRm9sZGVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jb3V0cHV0c3ltYm9sZm9sZGVyKSBhcyBpdHMgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIHVuZGVyIGl0cyByZXNwZWN0aXZlIGBpbnB1dFBhdGhzYCBmb2xkZXIgZW50cnkuICBGb3IgZXhhbXBsZSwgaWYgW2lucHV0UGF0aHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLyNpbnB1dHBhdGhzKSBpcyBgfi9kZXZgIGFuZCBpdCBjb250YWlucyB0aGUgZmlsZSBgfi9kZXYvYXBwL2Zvby5qc2AsIGFuZCB0aGlzIHZhbHVlIGlzIGB+L3N5bWJvbHNgLCB0aGUgcmVzcGVjdGl2ZSBvdXRwdXQgc3ltYm9sIHVuaXQgZmlsZSBpczogYH4vc3ltYm9scy9hcHAvZm9vLmpzLjEweC5qc29uYC4iCiAgICB9LAogICAgInNjYW4iIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZvcmNlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9sIHdoZXRoZXIgdG8gc2NhbiBpbnB1dCBmaWxlcyBldmVuIGlmIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3ltYm9sIGZpbGUgZXhpc3RzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmV1c2UgbWF0Y2hpbmcgc3ltYm9sIGZpbGVzIHdpdGhpbiBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpLiBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gZGVidWdnaW5nIGEgbmV3IHNjYW5uZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIEFOVExSIGdyYW1tYXIpICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbc2Nhbm5lciBkZWJ1Z2dpbmddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuKSBvcHRpb25zLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5Qcm9jZXNzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIHNjYW4gc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB1c2luZyBzdWItcHJvY2VzcyhlcylcblxuVGhlIHNjYW5uZXIgY2FuIGxhdW5jaCBbc3VicHJvY2Vzc2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jc3VicHJvY2Vzc18xKSB0byBjYXB0dXJlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIGluZm9ybWF0aW9uIGZyb20gc3BlY2lmaWMgdGFyZ2V0IHNvdXJjZS9iaW5hcnkgaW5wdXQgZmlsZXMuICAgR2VuZXJhdGluZyBpbnB1dCBmaWxlIFtBU1RzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BYnN0cmFjdF9zeW50YXhfdHJlZSkgdG8gc2NhbiBmb3Igc3ltYm9scyB2YWx1ZXMgZm9yIGNvbXBsZXggc3ludGF4ZXMgY2FuIGJlIGEgbGVuZ3RoeSwgcmVzb3VyY2UtY29uc3VtaW5nIG9wZXJhdGlvbiwgd2hpY2ggaW4gdGhlIGNhc2Ugb2YgIFtBTlRMUiBzeW50YXhlc10oaHR0cHM6Ly90b21hc3NldHRpLm1lL2ltcHJvdmluZy10aGUtcGVyZm9ybWFuY2Utb2YtYW4tYW50bHItcGFyc2VyLykgbWF5IHRpbWVvdXQgb3IgcnVuIG91dCBvZiBtZW1vcnkuICAgICBQcm9jZXNzIFtpc29sYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2Nlc3NfaXNvbGF0aW9uKSBhbGxvd3MgZm9yIHRlcm1pbmF0aW5nIHNjYW4gb3BlcmF0aW9ucyB0aGF0IHRpbWVvdXQgZm9yIHNwZWNpZmljIGZpbGVzLCB3aGlsZSBhbGxvd2luZyBvdGhlcnMgdG8gcHJvY2VlZC4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgInRocmVhZFBvb2xTaXplIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBjb25jdXJyZW50bHkgcHJvY2VzcyBpbnB1dCBzb3VyY2UgY29kZSAvYmluYXJ5IGZpbGVzXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHByb2Nlc3MgaW5wdXQgc291cmNlIGNvZGUvYmluYXJ5IGZpbGVzIGNvbmN1cnJlbnRseTogLSBJZiB0aGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAxLCB0aGUgbnVtYmVyIGNhbGN1bGF0ZXMgYSBwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBjb3JlcyAoZS5nLiwgMC41ID0gdXNlIHVwIHRvIDUwJSBvZiBhdmFpbGFibGUgY29yZXMpLiAgIC0gSWYgdGhlIHZhbHVlIGlzID49IDEsIHRoZSB2YWx1ZSBzZXRzIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMgKGUuZy4sIDEwID0gMTAgdGhyZWFkcykuICAgLSBJZiB0aGUgdmFsdWUgaXMgMSwgYWxsb2NhdGUgYSBzaW5nbGUgdGhyZWFkIHRvIHByb2Nlc3MgaW5wdXQgZmlsZXMuIChEZWZhdWx0OiAwLjUpIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICIwLjUiCiAgICAgICAgfSwKICAgICAgICAidW5pdFRpbWVvdXQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgaW50ZXJ2YWwgZm9yIHNjYW5uaW5nIGEgc291cmNlIGNvZGUgL2JpbmFyeSBpbnB1dCBmaWxlXG5cblNldHMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgd2hlbiBzY2FubmluZyBhIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZSBiZWZvcmUgZHJvcHBpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDIwcykiLAogICAgICAgICAgImRlZmF1bHQiIDogIjIwcyIKICAgICAgICB9LAogICAgICAgICJvcGVyYXRpb25UaW1lb3V0IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvblxuXG5TZXRzIHRoZSB0aW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvbiBiZWZvcmUgdGVybWluYXRpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDEwbSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjEwbSIKICAgICAgICB9LAogICAgICAgICJkZWJ1ZyIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgIm9yaWdpbnMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgKGUuZy4sIG15LnNjYWxhLCBmb28uamF2YSkgdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHdoaWNoIHN5bWJvbHMgd2VyZSBjYXB0dXJlZC9za2lwcGVkLiBTcGVjaWZ5ICcqJyBmb3IgYWxsIGZpbGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3ltYm9scyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2Ygbm9kZSB0eXBlcyB3aXRoaW4gYSBzY2FubmVyIEFTVCB0cmVlIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb25cblxuTGlzdCBvZiBub2RlcyB3aXRoaW4gYW4gaW5wdXQgQVNUIHRyZWUsIHN1Y2ggYXMgY2xhc3MgYW5kIG1ldGhvZCBuYW1lcyhlLmcuLCAnTXlDbGFzcycsICdmb28nKSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgd2VyZSBjYXB0dXJlZC9za2lwcGVkIGFzIHN5bWJvbHMuICBTcGVjaWZ5ICcqJyBmb3IgYWxsIG5vZGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5TcGVjaWZpZXMgdGhlIGxvZzRqIGxvZ2dlciBmb3IgbG9nZ2luZyB2YWx1ZXMgZm9yIHN5bWJvbHMvZmlsZXMgbWF0Y2hpbmcgJ2RlYnVnT3JpZ2lucycgYW5kICdkZWJ1Z1N5bWJvbHMnLiAoRGVmYXVsdDogW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSkiLAogICAgICAgICAgICAgICJkZWZhdWx0IiA6ICJbY29uc29sZU91dF0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvY29uZmlnL2Jsb2IvbWFpbi9sb2c0ajIueWFtbCNMNjYpIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgInByaW50T3V0cHV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQ29udHJvbHMgd2hldGhlciB0byBlbWl0IG91dHB1dCBzY2FuIG9wZXJhdGlvbnMgcHJvZ3Jlc3MgdG8gdGhlIGNvbnNvbGVcblxuQ29udHJvbHMgd2hldGhlciBpbmZvcm1hdGlvbiByZWxhdGluZyB0byBzeW1ib2wgdW5pdHMgc2Nhbm5pbmcgaXMgZW1pdHRlZCB0byB0aGUgc3Rkb3V0IHN0cmVhbS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiB0aGUgY3VycmVudCAxMHggcHJvY2VzcyBpcyAgc3Bhd25lZCBieSBhIHBhcmVudCAxMHggJ2NvbXBpbGUnIHBpcGVsaW5lIHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJ1bml0c1RvU2NhblBlckJhdGNoIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJudW1iZXIiLAogICAgICAgICJzdHJpbmciCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBpbnB1dCBmaWxlcyB0byBzY2FuIHBlciBzdWItcHJvY2Vzcy5cblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB0byBzY2FuIGJ5IGEgc2luZ2xlICdjb21waWxlJyBzdWItcHJvY2Vzcy4gU2V0IHRvIDAgdG8gdW5saW1pdGVkLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiA0MCkiLAogICAgICAiZGVmYXVsdCIgOiA0MAogICAgfSwKICAgICJ0b2tlbkRlbGltcyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRva2VuIGRlbGltaXRlcnNcblxuRGVmaW5lcyB3aGljaCBjaGFyYWN0ZXJzIGJyZWFrIGEgc3RyaW5nIG9mIGV2ZW50IGNoYXJhY3RlcnMgaW50byB0b2tlbnMgdG8gY2xhc3NpZnkgYXMgc3ltYm9scyBvciB2YXJpYWJsZXMuIChEZWZhdWx0OiA8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AKSIsCiAgICAgICJkZWZhdWx0IiA6ICI8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AIgogICAgfSwKICAgICJmaWxlRXh0U3RyaW5nRm9ybWF0cyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3RyaW5nIGZvcm1hdCBzcGVjaWZpZXIgY2hhcmFjdGVyc1xuXG5Db250cm9scyB3aGljaCBjaGFyYWN0ZXJzIGlkZW50aWZ5IHRoZSBzdGFydCBvZiBhIFtmb3JtYXQgc3BlY2lmaWVyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QcmludGYjRm9ybWF0X3NwZWNpZmllcikgZm9yIGVhY2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGluIHRoZSBmb3JtIG9mIDxleHQ+Ojxmb3JtYXRQcmVmaXg+IChlLmcuLCBgLmphdmE6JWApLiAgSXQgaXMgYSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB1c2Ugc3RyaW5nIGZvcm1hdHMgdG8gbG9nIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mOiAgYGBgIGphdmEgbG9nLmVycm9yKFwiY291bGQgbm90IGNvbm5lY3QgdG8ge30gd2l0aCBzdGF0dXMge31cIiwgaG9zdCwgc3RhdHVzKTsgYGBgICBXaGVuIGFuIFRlblhUZW1wbGF0ZSB0b2tlbml6ZXIgcHJvY2Vzc2luZyBhbiBldmVudCBpZGVudGlmaWVzIGEgZm9ybWF0IHByZWZpeCAoZS5nLiwgYCVgKSBpdCBza2lwcyBpdCBhbmQgYXBwZW5kcyBzdWJzZXF1ZW50IHN5bWJvbCB0b2tlbnMgKGUuZy4sIGB3aXRoIHN0YXR1c2ApIHRvIHRoZSBzeW1ib2wgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZW0gKGUuZy4sIGBjb3VsZCBub3QgY29ubmVjdCB0b2ApLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJtYXhTeW1ib2wiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgInVuaXRTZWN0aW9uU2l6ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBzeW1ib2wgdG9rZW5zIHRvIHN0b3JlIGluIGEgc2luZ2xlIHN5bWJvbCB1bml0IGZpbGVcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB0b2tlbnMgdG8gc3RvcmUgaW4gYSBzeW1ib2wgdW5pdCBiZWZvcmUgc3BsaXR0aW5nIGl0LiBUaGlzIG9wdGlvbiBzdXBwb3J0cyBsYXJnZSBzb3VyY2UgY29kZSAvYmluYXJ5IGlucHV0IGZpbGVzIHRoYXQgbWF5IGhhdmUgdGhvdXNhbmRzIG9mIHRleHQgc3ltYm9scyB0byBhdm9pZCAgY3JlYXRpbmcgc2l6ZWFibGUgaW5kaXZpZHVhbCBzeW1ib2wgdW5pdCBmaWxlcy4gICAgICAgICBTZXQgdG8gbnVsbCB0byBpZ25vcmUuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDUwMCkiLAogICAgICAgICAgImRlZmF1bHQiIDogNTAwCiAgICAgICAgfSwKICAgICAgICAidW5pdHNQZXJUb2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOdW1iZXIgb2Ygc3ltYm9sIHVuaXRzIHRvIHJldHJpZXZlIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgb3JpZ2luIG9mIGFuIFRlblhUZW1wbGF0ZSBzeW1ib2wgc2VxdWVuY2VcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGZyb20gdGhlIHBpcGVsaW5lJ3Mgc3ltYm9sIGxpYnJhcnkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBvcmlnaW4gb2YgYSBzcGVjaWZpYyBbVGVuWFRlbXBsYXRlXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90ZW1wbGF0ZS8pIHN5bWJvbC4gICBUaGUgW3N5bWJvbFNlcXVlbmNlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCtzeW1ib2xTZXF1ZW5jZSkgZnVuY3Rpb24gcXVlcmllcyB0aGUgc291cmNlIGNvZGUvYmluYXJ5IG9yaWdpbiBvZiBzeW1ib2wgc2VxdWVuY2VzIGluIGEgdGFyZ2V0IFRlblhUZW1wbGF0ZSB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBbbWVzc2FnZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vaW5pdGlhbGl6ZS9tZXNzYWdlLykgcG9ydGlvbiBvZiBhIHRhcmdldCBhcHAvaW5mcmEgZXZlbnRzIHZzLiB2YXJpYWJsZSBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiAoZS5nLiwgdXNlciwgaG9zdCwgc2V2ZXJpdHkpLiAgIFNpbmNlIGEgW3N5bWJvbF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N0cnVjdHVyZS8jc3ltYm9scykgdmFsdWUgbWF5IGFwcGVhciBpbiBodW5kcmVkcyBvciBtb3JlIGxvY2F0aW9ucyBhY3Jvc3MgYSBjb2RlIGJhc2UsICBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGlzIG5lY2Vzc2FyeSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLiAgIEEgc2Vjb25kIGNvbnNpZGVyYXRpb24gaXMgcGxhY2luZyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHVuaXRzIHRvIGxvYWQgZnJvbSB0aGUgc3ltYm9sIGxpYnJhcnksICB3aGljaCBpcyB0aGUgbW9yZSBmcmVxdWVudCBhIHN5bWJvbCBpcywgdGhlIGxvd2VyIHRoZSBwcm9iYWJpbGl0eSBvZiBzZWxlY3RpbmcgdGhlIGNvcnJlY3Qgb3JpZ2luLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiAxMjgpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDEyOAogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJpbnB1dFBhdGhzIgogIF0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' symbol scanner config
# Configure input and output options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/scan
tenx: compile
# ========================== Configure I/O Paths ==============================
# 'inputPaths' lists folders on disk containing source code and binary files to scan.
# To learn more see https://doc.log10x.com/compile/scan/#inputpaths
inputPaths:
- $=path("data/compile/sources", "") # Default to none ("") if source folder not found
# - <path-to-input-files> # uncomment to specify additional input paths
# 'outputSymbolFolder' specifies the folder for output symbol unit files.
# To learn more see https://doc.log10x.com/compile/scan/#outputsymbolfolder
outputSymbolFolder: $=TenXEnv.get("TENX_OUTPUT_SYMBOL_FOLDER", path("data/shared/symbols", "<tenx.io.tmpdir>")) # Default to 10x temp dir
Advanced
Advanced
Below is the default configuration from: advanced/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaW5wdXRQYXRocyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJJbnB1dCBmb2xkZXJzIHRvIHNjYW5cblxuUHJvdmlkZXMgYSBsaXN0IG9mIGZvbGRlcnMgdGhhdCBhcmUgdHJhdmVyc2VkIGluIHNlYXJjaCBvZiBzb3VyY2UgY29kZSAoZS5nLiAuanMsIC5jcHApLCBiaW5hcnkgKGUuZy4sIC5zbywgLmphciwgLnppcCkgYW5kIHRleHQgKGUuZy4sIC5qc29uLCAueG1sKSBmaWxlcyB0byBjYXB0dXJlIHN5bWJvbCB2YWx1ZXMgZnJvbSBhbmQgb3V0cHV0IHRvIHN5bWJvbCB1bml0IGZpbGVzLiBJbnB1dCBmb2xkZXJzIG1heSBjb250YWluIGZpbGVzIGFuZCBmb2xkZXJzIHB1bGxlZCBmcm9tIFtHaXRIdWJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2dpdGh1Yi8pIG9yICBhbmQgW0FydGlmYWN0b3J5XShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvYXJ0aWZhY3RvcnkpLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJvdXRwdXRTeW1ib2xGb2xkZXIiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2NhdGlvbiBvZiBvdXRwdXQgc3ltYm9sIGZvbGRlclxuXG5TcGVjaWZpZXMgdGhlIHJvb3QgZm9sZGVyIGluIHdoaWNoIHRvIHdyaXRlIG91dHB1dCBzeW1ib2wgdW5pdCBmaWxlcy4gVGhpcyBjb21waWxlciBbc2NhbiBwaGFzZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vKSBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykgYXJndW1lbnQsIHBsYWNpbmcgZWFjaCBvdXRwdXQgc3ltYm9sIHVuaXQgaW4gdGhlIHNhbWUgcmVsYXRpdmUgcGF0aCB1bmRlciBbb3V0cHV0U3ltYm9sRm9sZGVyXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jb3V0cHV0c3ltYm9sZm9sZGVyKSBhcyBpdHMgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIHVuZGVyIGl0cyByZXNwZWN0aXZlIGBpbnB1dFBhdGhzYCBmb2xkZXIgZW50cnkuICBGb3IgZXhhbXBsZSwgaWYgW2lucHV0UGF0aHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLyNpbnB1dHBhdGhzKSBpcyBgfi9kZXZgIGFuZCBpdCBjb250YWlucyB0aGUgZmlsZSBgfi9kZXYvYXBwL2Zvby5qc2AsIGFuZCB0aGlzIHZhbHVlIGlzIGB+L3N5bWJvbHNgLCB0aGUgcmVzcGVjdGl2ZSBvdXRwdXQgc3ltYm9sIHVuaXQgZmlsZSBpczogYH4vc3ltYm9scy9hcHAvZm9vLmpzLjEweC5qc29uYC4iCiAgICB9LAogICAgInNjYW4iIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZvcmNlIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9sIHdoZXRoZXIgdG8gc2NhbiBpbnB1dCBmaWxlcyBldmVuIGlmIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3ltYm9sIGZpbGUgZXhpc3RzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmV1c2UgbWF0Y2hpbmcgc3ltYm9sIGZpbGVzIHdpdGhpbiBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpLiBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gZGVidWdnaW5nIGEgbmV3IHNjYW5uZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIEFOVExSIGdyYW1tYXIpICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbc2Nhbm5lciBkZWJ1Z2dpbmddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuKSBvcHRpb25zLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5Qcm9jZXNzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIHNjYW4gc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB1c2luZyBzdWItcHJvY2VzcyhlcylcblxuVGhlIHNjYW5uZXIgY2FuIGxhdW5jaCBbc3VicHJvY2Vzc2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jc3VicHJvY2Vzc18xKSB0byBjYXB0dXJlIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIGluZm9ybWF0aW9uIGZyb20gc3BlY2lmaWMgdGFyZ2V0IHNvdXJjZS9iaW5hcnkgaW5wdXQgZmlsZXMuICAgR2VuZXJhdGluZyBpbnB1dCBmaWxlIFtBU1RzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BYnN0cmFjdF9zeW50YXhfdHJlZSkgdG8gc2NhbiBmb3Igc3ltYm9scyB2YWx1ZXMgZm9yIGNvbXBsZXggc3ludGF4ZXMgY2FuIGJlIGEgbGVuZ3RoeSwgcmVzb3VyY2UtY29uc3VtaW5nIG9wZXJhdGlvbiwgd2hpY2ggaW4gdGhlIGNhc2Ugb2YgIFtBTlRMUiBzeW50YXhlc10oaHR0cHM6Ly90b21hc3NldHRpLm1lL2ltcHJvdmluZy10aGUtcGVyZm9ybWFuY2Utb2YtYW4tYW50bHItcGFyc2VyLykgbWF5IHRpbWVvdXQgb3IgcnVuIG91dCBvZiBtZW1vcnkuICAgICBQcm9jZXNzIFtpc29sYXRpb25dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Byb2Nlc3NfaXNvbGF0aW9uKSBhbGxvd3MgZm9yIHRlcm1pbmF0aW5nIHNjYW4gb3BlcmF0aW9ucyB0aGF0IHRpbWVvdXQgZm9yIHNwZWNpZmljIGZpbGVzLCB3aGlsZSBhbGxvd2luZyBvdGhlcnMgdG8gcHJvY2VlZC4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgInRocmVhZFBvb2xTaXplIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBjb25jdXJyZW50bHkgcHJvY2VzcyBpbnB1dCBzb3VyY2UgY29kZSAvYmluYXJ5IGZpbGVzXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHByb2Nlc3MgaW5wdXQgc291cmNlIGNvZGUvYmluYXJ5IGZpbGVzIGNvbmN1cnJlbnRseTogLSBJZiB0aGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAxLCB0aGUgbnVtYmVyIGNhbGN1bGF0ZXMgYSBwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBjb3JlcyAoZS5nLiwgMC41ID0gdXNlIHVwIHRvIDUwJSBvZiBhdmFpbGFibGUgY29yZXMpLiAgIC0gSWYgdGhlIHZhbHVlIGlzID49IDEsIHRoZSB2YWx1ZSBzZXRzIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMgKGUuZy4sIDEwID0gMTAgdGhyZWFkcykuICAgLSBJZiB0aGUgdmFsdWUgaXMgMSwgYWxsb2NhdGUgYSBzaW5nbGUgdGhyZWFkIHRvIHByb2Nlc3MgaW5wdXQgZmlsZXMuIChEZWZhdWx0OiAwLjUpIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICIwLjUiCiAgICAgICAgfSwKICAgICAgICAidW5pdFRpbWVvdXQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgaW50ZXJ2YWwgZm9yIHNjYW5uaW5nIGEgc291cmNlIGNvZGUgL2JpbmFyeSBpbnB1dCBmaWxlXG5cblNldHMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgd2hlbiBzY2FubmluZyBhIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZSBiZWZvcmUgZHJvcHBpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDIwcykiLAogICAgICAgICAgImRlZmF1bHQiIDogIjIwcyIKICAgICAgICB9LAogICAgICAgICJvcGVyYXRpb25UaW1lb3V0IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvblxuXG5TZXRzIHRoZSB0aW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvbiBiZWZvcmUgdGVybWluYXRpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDEwbSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjEwbSIKICAgICAgICB9LAogICAgICAgICJkZWJ1ZyIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgIm9yaWdpbnMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvblxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGlucHV0IGZpbGUgbmFtZXMgKGUuZy4sIG15LnNjYWxhLCBmb28uamF2YSkgdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHdoaWNoIHN5bWJvbHMgd2VyZSBjYXB0dXJlZC9za2lwcGVkLiBTcGVjaWZ5ICcqJyBmb3IgYWxsIGZpbGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAic3ltYm9scyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2Ygbm9kZSB0eXBlcyB3aXRoaW4gYSBzY2FubmVyIEFTVCB0cmVlIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb25cblxuTGlzdCBvZiBub2RlcyB3aXRoaW4gYW4gaW5wdXQgQVNUIHRyZWUsIHN1Y2ggYXMgY2xhc3MgYW5kIG1ldGhvZCBuYW1lcyhlLmcuLCAnTXlDbGFzcycsICdmb28nKSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXkgd2VyZSBjYXB0dXJlZC9za2lwcGVkIGFzIHN5bWJvbHMuICBTcGVjaWZ5ICcqJyBmb3IgYWxsIG5vZGVzLiIsCiAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibG9nZ2VyTmFtZSIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEZWJ1ZyBsb2dnZXIgbmFtZVxuXG5TcGVjaWZpZXMgdGhlIGxvZzRqIGxvZ2dlciBmb3IgbG9nZ2luZyB2YWx1ZXMgZm9yIHN5bWJvbHMvZmlsZXMgbWF0Y2hpbmcgJ2RlYnVnT3JpZ2lucycgYW5kICdkZWJ1Z1N5bWJvbHMnLiAoRGVmYXVsdDogW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSkiLAogICAgICAgICAgICAgICJkZWZhdWx0IiA6ICJbY29uc29sZU91dF0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvY29uZmlnL2Jsb2IvbWFpbi9sb2c0ajIueWFtbCNMNjYpIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgInByaW50T3V0cHV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQ29udHJvbHMgd2hldGhlciB0byBlbWl0IG91dHB1dCBzY2FuIG9wZXJhdGlvbnMgcHJvZ3Jlc3MgdG8gdGhlIGNvbnNvbGVcblxuQ29udHJvbHMgd2hldGhlciBpbmZvcm1hdGlvbiByZWxhdGluZyB0byBzeW1ib2wgdW5pdHMgc2Nhbm5pbmcgaXMgZW1pdHRlZCB0byB0aGUgc3Rkb3V0IHN0cmVhbS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIHRydWUgd2hlbiB0aGUgY3VycmVudCAxMHggcHJvY2VzcyBpcyAgc3Bhd25lZCBieSBhIHBhcmVudCAxMHggJ2NvbXBpbGUnIHBpcGVsaW5lIHRvIHJlcG9ydCBpdHMgcHJvZ3Jlc3MuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJ1bml0c1RvU2NhblBlckJhdGNoIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJudW1iZXIiLAogICAgICAgICJzdHJpbmciCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBpbnB1dCBmaWxlcyB0byBzY2FuIHBlciBzdWItcHJvY2Vzcy5cblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB0byBzY2FuIGJ5IGEgc2luZ2xlICdjb21waWxlJyBzdWItcHJvY2Vzcy4gU2V0IHRvIDAgdG8gdW5saW1pdGVkLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiA0MCkiLAogICAgICAiZGVmYXVsdCIgOiA0MAogICAgfSwKICAgICJ0b2tlbkRlbGltcyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRva2VuIGRlbGltaXRlcnNcblxuRGVmaW5lcyB3aGljaCBjaGFyYWN0ZXJzIGJyZWFrIGEgc3RyaW5nIG9mIGV2ZW50IGNoYXJhY3RlcnMgaW50byB0b2tlbnMgdG8gY2xhc3NpZnkgYXMgc3ltYm9scyBvciB2YXJpYWJsZXMuIChEZWZhdWx0OiA8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AKSIsCiAgICAgICJkZWZhdWx0IiA6ICI8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AIgogICAgfSwKICAgICJmaWxlRXh0U3RyaW5nRm9ybWF0cyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3RyaW5nIGZvcm1hdCBzcGVjaWZpZXIgY2hhcmFjdGVyc1xuXG5Db250cm9scyB3aGljaCBjaGFyYWN0ZXJzIGlkZW50aWZ5IHRoZSBzdGFydCBvZiBhIFtmb3JtYXQgc3BlY2lmaWVyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QcmludGYjRm9ybWF0X3NwZWNpZmllcikgZm9yIGVhY2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGluIHRoZSBmb3JtIG9mIDxleHQ+Ojxmb3JtYXRQcmVmaXg+IChlLmcuLCBgLmphdmE6JWApLiAgSXQgaXMgYSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB1c2Ugc3RyaW5nIGZvcm1hdHMgdG8gbG9nIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mOiAgYGBgIGphdmEgbG9nLmVycm9yKFwiY291bGQgbm90IGNvbm5lY3QgdG8ge30gd2l0aCBzdGF0dXMge31cIiwgaG9zdCwgc3RhdHVzKTsgYGBgICBXaGVuIGFuIFRlblhUZW1wbGF0ZSB0b2tlbml6ZXIgcHJvY2Vzc2luZyBhbiBldmVudCBpZGVudGlmaWVzIGEgZm9ybWF0IHByZWZpeCAoZS5nLiwgYCVgKSBpdCBza2lwcyBpdCBhbmQgYXBwZW5kcyBzdWJzZXF1ZW50IHN5bWJvbCB0b2tlbnMgKGUuZy4sIGB3aXRoIHN0YXR1c2ApIHRvIHRoZSBzeW1ib2wgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZW0gKGUuZy4sIGBjb3VsZCBub3QgY29ubmVjdCB0b2ApLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJtYXhTeW1ib2wiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgInVuaXRTZWN0aW9uU2l6ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBzeW1ib2wgdG9rZW5zIHRvIHN0b3JlIGluIGEgc2luZ2xlIHN5bWJvbCB1bml0IGZpbGVcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB0b2tlbnMgdG8gc3RvcmUgaW4gYSBzeW1ib2wgdW5pdCBiZWZvcmUgc3BsaXR0aW5nIGl0LiBUaGlzIG9wdGlvbiBzdXBwb3J0cyBsYXJnZSBzb3VyY2UgY29kZSAvYmluYXJ5IGlucHV0IGZpbGVzIHRoYXQgbWF5IGhhdmUgdGhvdXNhbmRzIG9mIHRleHQgc3ltYm9scyB0byBhdm9pZCAgY3JlYXRpbmcgc2l6ZWFibGUgaW5kaXZpZHVhbCBzeW1ib2wgdW5pdCBmaWxlcy4gICAgICAgICBTZXQgdG8gbnVsbCB0byBpZ25vcmUuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IDUwMCkiLAogICAgICAgICAgImRlZmF1bHQiIDogNTAwCiAgICAgICAgfSwKICAgICAgICAidW5pdHNQZXJUb2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOdW1iZXIgb2Ygc3ltYm9sIHVuaXRzIHRvIHJldHJpZXZlIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgb3JpZ2luIG9mIGFuIFRlblhUZW1wbGF0ZSBzeW1ib2wgc2VxdWVuY2VcblxuQ29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGZyb20gdGhlIHBpcGVsaW5lJ3Mgc3ltYm9sIGxpYnJhcnkgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBvcmlnaW4gb2YgYSBzcGVjaWZpYyBbVGVuWFRlbXBsYXRlXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90ZW1wbGF0ZS8pIHN5bWJvbC4gICBUaGUgW3N5bWJvbFNlcXVlbmNlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWE9iamVjdCtzeW1ib2xTZXF1ZW5jZSkgZnVuY3Rpb24gcXVlcmllcyB0aGUgc291cmNlIGNvZGUvYmluYXJ5IG9yaWdpbiBvZiBzeW1ib2wgc2VxdWVuY2VzIGluIGEgdGFyZ2V0IFRlblhUZW1wbGF0ZSB0byBpZGVudGlmeSB0aGUgbG9naWNhbCBbbWVzc2FnZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vaW5pdGlhbGl6ZS9tZXNzYWdlLykgcG9ydGlvbiBvZiBhIHRhcmdldCBhcHAvaW5mcmEgZXZlbnRzIHZzLiB2YXJpYWJsZSBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiAoZS5nLiwgdXNlciwgaG9zdCwgc2V2ZXJpdHkpLiAgIFNpbmNlIGEgW3N5bWJvbF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N0cnVjdHVyZS8jc3ltYm9scykgdmFsdWUgbWF5IGFwcGVhciBpbiBodW5kcmVkcyBvciBtb3JlIGxvY2F0aW9ucyBhY3Jvc3MgYSBjb2RlIGJhc2UsICBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byBsb2FkIGlzIG5lY2Vzc2FyeSB0byByZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uLiAgIEEgc2Vjb25kIGNvbnNpZGVyYXRpb24gaXMgcGxhY2luZyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHVuaXRzIHRvIGxvYWQgZnJvbSB0aGUgc3ltYm9sIGxpYnJhcnksICB3aGljaCBpcyB0aGUgbW9yZSBmcmVxdWVudCBhIHN5bWJvbCBpcywgdGhlIGxvd2VyIHRoZSBwcm9iYWJpbGl0eSBvZiBzZWxlY3RpbmcgdGhlIGNvcnJlY3Qgb3JpZ2luLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiAxMjgpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IDEyOAogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgInJlcXVpcmVkIiA6IFsKICAgICJpbnB1dFBhdGhzIgogIF0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' symbol scanner advanced config
# Configure input and output options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/scan/
# Set the 10x pipeline to 'compile'
tenx: compile
inputPaths: []
# ============================ Advanced options ===============================
# ----------------------------- Tokenizer options -----------------------------
# Tokenization options provide control over how the symbol scanners parse source and config file input.
# To learn more https://doc.log10x.com/compile/scan/#tokenize
# 'tokenDelims' defines which characters break a string of event characters into tokens to
# classify as symbols or variables.
tokenDelims: "<>|. ][:-+/*=\\,{}_();'\"$\t\n@"
# 'fileExtStringFormats' controls which characters identify the start of a format specifier (https://en.wikipedia.org/wiki/Printf#Format_specifier).
fileExtStringFormats:
- .java:%
- .py:{
- .js:${
- .php:$
- .swift:\(
- .kt:$
- .rb:#{
- .ex:#{
- .c:%
- .cpp:%
- .cs:{
- .go:%
- .rs:{
- .ts:${
- .pl:$
- .sh:$
- .r:%
- .m:%
- .scala:$
maxSymbol:
# 'unitsPerToken' controls the maximum number of symbol units to load from the
# pipeline's symbol library when searching for the origin of a specific TenXTemplate symbol.
unitsPerToken: 128
# ----------------------------- Subprocess options ----------------------------
# Subprocess options control whether scanners execute in the current 10x Engine instance
# or via a sub-process to provide better isolation over parsing of complex source code ASTs.
# To learn more https://doc.log10x.com/compile/scan/#subprocess_1
# 'unitsToScanPerBatch' sets the maximum number of input files to scan per subprocess instance.
# When this threshold is exceeded the current subprocess terminated and a new one is spawned until scan is complete.
unitsToScanPerBatch: 200
scan:
# ----------------------------- Threading options ----------------------------
# 'threadPoolSize'controls the maximum number of threads to concurrently
# process input source/binary files. If the value is between 0 and 1, the number calculates
# a percentage of available cores (e.g., 0.5 = use up to 50% of available cores).
# If the value is >= 1, the value sets a fixed number of threads (e.g., 10 = 10 threads).
# If the value is 1, allocate a single thread to process input files.
# To learn more see https://doc.log10x.com/compile/scan/#parallel
threadPoolSize: "0.5"
# 'scanUnitTimeout' sets the timeout interval when scanning a source/binary input
# file before dropping it.
unitTimeout: 30s
# 'scanOperationTimeout' sets the timeout interval for the entire scanning operation
# before terminating it.
operationTimeout: 10m
# -------------------------------- Debug Option -------------------------------
# The settings below provide control over what information is logged
# to console/file when scanning input source code/text/binary files for symbol values.
# These options are primarily used when adding support for a new programming language
# syntax via the 'ANTLR' scanner, text file formats via the Jackson 'text' scanner
# or an external command using the 'executable' scanner.
debug:
# 'origins' lists names of input source/binary files
# (e.g. .class, .js, .yaml, .exe) for which debug information
# is printed to the console via 'consoleOut' log4j logger.
# Printed output is dependent on the scanner assigned to process the input file
# and usually includes the AST of the input file from which tokens are selected.
# This information can be used when debugging which symbols are extracted
# from an input file in the context of an 'antlr', 'text' or 'executable' scanner.
# Set to '*' to match all input files.
origins: [
# '*'
]
# 'symbols' lists the values of nodes within the AST of a
# target input file (e.g. MyClass, MyEnum, myFunc, ..) for which
# debug information is printed to the console via the 'consoleOut' logger.
# This includes source context (e.g. class, enum) and path within the AST
# in which the node was detected. Set to '*' to match all AST nodes.
symbols: [
#'*'
]
# 'inProcess' controls whether to scan source/binary input files from within the current
# 10x process or launch a sequential series subprocesses for better isolation
# inProcess: true
# 'force' enables scanning of source/binary input files even if a matching
# symbol unit was found in 'inputPaths'. This flag is useful when debugging
# an Antlr/text/exec scanner using 'debugOrigins' and 'debugSymbols'
# to ensure a scan takes place even if a matching symbol unit is found.
# force: false
Options
Specify the options below to configure the Input Scanner:
| Name | Description | Category |
|---|---|---|
| inputPaths | Input folders to scan | Input |
| outputSymbolFolder | Location of output symbol folder | Output |
| scanForce | Control whether to scan input files even if a matching existing symbol file exists | Output |
| maxSymbolUnitSectionSize | Maximum number of symbol tokens to store in a single symbol unit file | Output |
| scanInProcess | Controls whether to scan source/binary input files using sub-process(es) | Subprocess |
| printOutput | Controls whether to emit output scan operations progress to the console | Subprocess |
| unitsToScanPerBatch | Maximum number of input files to scan per sub-process. | Subprocess |
| scanThreadPoolSize | Maximum number of threads to use concurrently process input source code /binary files | Parallel |
| scanUnitTimeout | Timeout interval for scanning a source code /binary input file | Parallel |
| scanOperationTimeout | Timeout interval for the entire scanning operation | Parallel |
| tokenDelims | Token delimiters | Tokenize |
| fileExtStringFormats | String format specifier characters | Tokenize |
| maxSymbolUnitsPerToken | Number of symbol units to retrieve when searching for the origin of an TenXTemplate symbol sequence | Tokenize |
| scanDebugOrigins | List of input file names for which to log information | Debug |
| scanDebugSymbols | List of node types within a scanner AST tree for which to log information | Debug |
| scanDebugLoggerName | Debug logger name | Debug |
Input
inputPaths
Input folders to scan.
| Type | Required | Category |
|---|---|---|
| List | ✔ | Input |
Provides a list of folders that are traversed in search of source code (e.g. .js, .cpp), binary (e.g., .so, .jar, .zip) and text (e.g., .json, .xml) files to capture symbol values from and output to symbol unit files. Input folders may contain files and folders pulled from GitHub or and Artifactory.
Output
outputSymbolFolder
Location of output symbol folder.
| Type | Default | Category |
|---|---|---|
| File | Output |
Specifies the root folder in which to write output symbol unit files.
This compiler scan phase mirrors the structure of the inputPaths argument, placing each
output symbol unit in the same relative path under outputSymbolFolder
as its source/binary input file under its respective inputPaths folder entry.
For example, if inputPaths is ~/dev and it contains the file ~/dev/app/foo.js,
and this value is ~/symbols, the respective output symbol unit file is: ~/symbols/app/foo.js.10x.json.
scanForce
Control whether to scan input files even if a matching existing symbol file exists.
| Type | Default | Category |
|---|---|---|
| Boolean | false | Output |
Controls whether to reuse matching symbol files within inputPaths. This option is primarily useful when debugging a new scanner module configuration (e.g., ANTLR grammar) in conjunction with the scanner debugging options.
maxSymbolUnitSectionSize
Maximum number of symbol tokens to store in a single symbol unit file.
| Type | Default | Category |
|---|---|---|
| Number | 500 | Output |
Controls the maximum number of symbol tokens to store in a symbol unit before splitting it.
This option supports large source code /binary input files that may have thousands of text symbols to avoid
creating sizeable individual symbol unit files.
Set to null to ignore.
Subprocess
scanInProcess
Controls whether to scan source/binary input files using sub-process(es).
| Type | Default | Category |
|---|---|---|
| Boolean | false | Subprocess |
The scanner can launch subprocesses to capture symbol information from specific target source/binary input files.
Generating input file ASTs to scan for symbols values for complex syntaxes can be a lengthy, resource-consuming operation, which in the case of ANTLR syntaxes may timeout or run out of memory.
Process isolation allows for terminating scan operations that timeout for specific files, while allowing others to proceed.
printOutput
Controls whether to emit output scan operations progress to the console.
| Type | Default | Category |
|---|---|---|
| Boolean | false | Subprocess |
Controls whether information relating to symbol units scanning is emitted to the stdout stream. This value should be set to true when the current 10x process is spawned by a parent 10x 'compile' pipeline to report its progress.
unitsToScanPerBatch
Maximum number of input files to scan per sub-process.
| Type | Default | Category |
|---|---|---|
| Number | 40 | Subprocess |
Sets the maximum number of source/binary input files to scan by a single 'compile' sub-process.
Set to 0 to unlimited.
Parallel
scanThreadPoolSize
Maximum number of threads to use concurrently process input source code /binary files.
| Type | Default | Category |
|---|---|---|
| String | 0.5 | Parallel |
Controls the maximum number of threads to process input source code/binary files concurrently:
- If the value is between 0 and 1, the number calculates a percentage of available cores (e.g., 0.5 = use up to 50% of available cores).
- If the value is >= 1, the value sets a fixed number of threads (e.g., 10 = 10 threads).
- If the value is 1, allocate a single thread to process input files.
scanUnitTimeout
Timeout interval for scanning a source code /binary input file.
| Type | Default | Category |
|---|---|---|
| String | 20s | Parallel |
Sets the timeout interval when scanning a source code /binary input file before dropping it. Set to null to ignore.
scanOperationTimeout
Timeout interval for the entire scanning operation.
| Type | Default | Category |
|---|---|---|
| String | 10m | Parallel |
Sets the timeout interval for the entire scanning operation before terminating it.
Set to null to ignore.
Tokenize
tokenDelims
Token delimiters.
| Type | Default | Category |
|---|---|---|
| String | \<>|. ][:-+/*=\\,{}_();'\"$\t\n@ | Tokenize |
Defines which characters break a string of event characters into tokens to classify as symbols or variables.
fileExtStringFormats
String format specifier characters.
| Type | Default | Category |
|---|---|---|
| List | [] | Tokenize |
Controls which characters identify the start of a format specifier
for each programming language extension in the form of .java:%).
It is a standard programming practice to use string formats to log messages in the form of:
When an TenXTemplate tokenizer processing an event identifies a format prefix (e.g., %)
it skips it and appends subsequent symbol tokens (e.g., with status)
to the symbol sequence preceding them (e.g., could not connect to).
maxSymbolUnitsPerToken
Number of symbol units to retrieve when searching for the origin of an TenXTemplate symbol sequence.
| Type | Default | Category |
|---|---|---|
| Number | 128 | Tokenize |
Controls the maximum number of symbol units to load from the pipeline's symbol library when searching for the origin of a specific TenXTemplate symbol.
The symbolSequence function queries the source code/binary origin of symbol sequences in a target TenXTemplate to identify the logical message portion of a target app/infra events vs. variable and context information (e.g., user, host, severity).
Since a symbol value may appear in hundreds or more locations across a code base, limiting the number of symbol units to load is necessary to reduce memory consumption.
A second consideration is placing an upper limit on the number of units to load from the symbol library, which is the more frequent a symbol is, the lower the probability of selecting the correct origin.
Debug
scanDebugOrigins
List of input file names for which to log information.
| Type | Default | Category |
|---|---|---|
| List | [] | Debug |
Specifies a list of input file names (e.g., my.scala, foo.java) to log information relating to which symbols were captured/skipped.
Specify '*' for all files.
scanDebugSymbols
List of node types within a scanner AST tree for which to log information.
| Type | Default | Category |
|---|---|---|
| List | [] | Debug |
List of nodes within an input AST tree, such as class and method names(e.g., 'MyClass', 'foo') for which to log information relating to the context in which they were captured/skipped as symbols.
Specify '*' for all nodes.
scanDebugLoggerName
Debug logger name.
| Type | Default | Category |
|---|---|---|
| String | consoleOut | Debug |
Specifies the log4j logger for logging values for symbols/files matching 'debugOrigins' and 'debugSymbols'.
This unit is defined in scan/unit.yaml.