EPICS IOC record search and meta information tool
Project description
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 files
EPICS V4 database files
EPICS 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 IOC
Loads and lints record files (and other supported formats above)
Builds inter- and intra- IOC PV relationship graphs
Stores context information about where each record/field/etc came from
API server
IOC finder (LCLS IOC manager, list of files, or external script)
Provides access to all parsed information above
Preliminary asyncio-based client to talk with the server
Frontend
User-friendly vue.js v3 frontend that communicates with API server
- Interfaces for:
Searching for records
Record relationships (processing and links, cross-IOC links)
IOC information
Gateway configuration overview
Duplicate records
Optional plugins
Plugins
happi devices
Simple LDAP search (LCLS hosts, “netconfig”)
LCLS-specific epicsArch / logbook DAQ PVs
TwinCAT PLC source code (pytmc)
Makefile / build system information
Determine build dependencies from a Makefile
Recursively inspect sub-dependencies
Graph IOC dependency information or output it as JSON
Command-line tools
whatrecord lint - lint a database
whatrecord parse - parse supported formats
whatrecord server - start the API server
whatrecord graph - graph PV relationships, SNL diagrams, IOC dependencies
Record?
Requirements
Requirements:
Python 3.9
aiohttp
apischema[graphql]
graphviz
jinja2
lark
Docker
See /docker to 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 Screenshots
Search 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 Screenshots
Use whatrecord deps --graph to inspect IOCs/modules with make and generate a dependency graph of modules:
Use whatrecord graph to graph state notation language .st file logic:
Use an external tool like jq to 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"
}
}
}
]
...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for whatrecord-0.6.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b48ea0a98f6fa6a8ef80e877e6fb1820703937ef44bb75724b14c05f1c7dcc7b |
|
MD5 | 6bf0556a42c4c590aac3cfe5fbedd33b |
|
BLAKE2b-256 | 5cca47f6cd9ffc7933ca0c00b519309561900d1a70fff42cb225f8c23f909aae |