Package: whatrecord
EPICS IOC record search and meta information tool.Spiritual successor of recordwhat.https://pcdshub.github.io/whatrecord/What?Lark grammar-based parsers which parse any of the following into easy-to-use
Python dataclasses:EPICS access security files (.acf)EPICS autosave save files (.sav)EPICS V3 database filesEPICS V4 database filesEPICS msi-style template/substitutions files (.template/.substitutions)EPICS gateway configuration (.pvlist)EPICS sequencer state notation language programs (.st)EPICS StreamDevice protocols (.proto)All of the above can be easily serialized to JSON for interoperability.Pseudo-IOC shell interpreter:Reads st.cmd files as if it were an IOCLoads and lints record files (and other supported formats above)Builds inter- and intra- IOC PV relationship graphsStores context information about where each record/field/etc came fromAPI serverIOC finder (LCLS IOC manager, list of files, or external script)Provides access to all parsed information abovePreliminary asyncio-based client to talk with the serverFrontendUser-friendly vue.js v3 frontend that communicates with API serverInterfaces for:Searching for recordsRecord relationships (processing and links, cross-IOC links)IOC informationGateway configuration overviewDuplicate recordsOptional pluginsPluginshappi devicesSimple LDAP search (LCLS hosts, “netconfig”)LCLS-specific epicsArch / logbook DAQ PVsTwinCAT PLC source code (pytmc)Makefile / build system informationDetermine build dependencies from aMakefileRecursively inspect sub-dependenciesGraph IOC dependency information or output it as JSONCommand-line toolswhatrecord lint- lint a databasewhatrecord parse- parse supported formatswhatrecord server- start the API serverwhatrecord graph- graph PV relationships, SNL diagrams, IOC dependenciesRecord?https://docs.epics-controls.org/en/latest/guides/EPICS_Process_Database_Concepts.html#the-epics-process-databaseRequirementsRequirements:Python 3.9aiohttpapischema[graphql]graphvizjinja2larkDockerSee/dockerto set up a Python 3.10-based whatrecord container.
A docker-compose configuration for starting up the frontend/backend servers
is also provided.  Note that the default configuration only indexes the
whatrecord-provided IOCs.Frontend ScreenshotsSearch for records and view relationships:View StreamDevice protocol information:See where your qsrv pvAccess keys come from:See access security settings:View all of your IOCs in one place and browse their records by type:View inter-IOC record relationships:View all of your ophyd/happi devices and their relevant PVs:View LDAP-provided settings:(LCLS-specific) View epicsArch DAQ PVs:View gateway PVList configurations:View record duplicates:View API server logs:See per-parameter values:See database lint:Other ScreenshotsUsewhatrecord deps--graphto inspect IOCs/modules withmakeand
generate a dependency graph of modules:Usewhatrecord graphto graph state notation language.stfile
logic:Use an external tool likejqto sift through information from whatrecord’s
JSON output:$ whatrecord parse whatrecord/tests/iocs/db/pva/iq.db | jq '.records[] | [.name, .record_type, .fields.OUT.value]'
[
  "$(PREFIX)Rate",
  "ao",
  "$(PREFIX)dly_.ODLY NPP"
]
[
  "$(PREFIX)Delta",
  "ao",
  null
]
...

$ whatrecord parse whatrecord/tests/iocs/db/pva/iq.db | jq '.records[] | [ .name, .info["Q:group"]]'
[
  "$(PREFIX)Rate",
  null
]
[
  "$(PREFIX)Phase:I",
  {
    "$(PREFIX)iq": {
      "phas.i": {
        "+type": "plain",
        "+channel": "VAL"
      }
    }
  }
]
...