Skip to main content

EPICS IOC record search and meta information tool

Project description

https://img.shields.io/travis/pcdshub/whatrecord.svg https://img.shields.io/pypi/v/whatrecord.svg

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?

https://docs.epics-controls.org/en/latest/guides/EPICS_Process_Database_Concepts.html#the-epics-process-database

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:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_1.png

View StreamDevice protocol information:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_2.png

See where your qsrv pvAccess keys come from:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_3.png

See access security settings:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_4.png

View all of your IOCs in one place and browse their records by type:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_5.png

View inter-IOC record relationships:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_6.png

View all of your ophyd/happi devices and their relevant PVs:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_7.png

View LDAP-provided settings:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_8.png

(LCLS-specific) View epicsArch DAQ PVs:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_9.png

View gateway PVList configurations:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_10.png

View record duplicates:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_11.png

View API server logs:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_12.png

See per-parameter values:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_13.png https://github.com/pcdshub/whatrecord/raw/assets/screenshot_15.png

See database lint:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_14.png

Other Screenshots

Use whatrecord deps --graph to inspect IOCs/modules with make and generate a dependency graph of modules:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_16.png

Use whatrecord graph to graph state notation language .st file logic:

https://github.com/pcdshub/whatrecord/raw/assets/screenshot_17.png https://github.com/pcdshub/whatrecord/raw/assets/screenshot_18.png

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whatrecord-0.6.0.tar.gz (577.8 kB view hashes)

Uploaded Source

Built Distribution

whatrecord-0.6.0-py3-none-any.whl (291.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page