{"id":36647482,"url":"https://github.com/pcdshub/whatrecord","last_synced_at":"2026-01-12T10:02:07.710Z","repository":{"id":38425074,"uuid":"351239988","full_name":"pcdshub/whatrecord","owner":"pcdshub","description":"EPICS IOC meta information tool","archived":false,"fork":false,"pushed_at":"2025-04-17T22:03:54.000Z","size":10158,"stargazers_count":9,"open_issues_count":38,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-05T21:10:45.482Z","etag":null,"topics":["epics","happi","iocs","lark-parser","pytmc"],"latest_commit_sha":null,"homepage":"https://pcdshub.github.io/whatrecord/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pcdshub.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-24T22:26:12.000Z","updated_at":"2025-07-31T17:08:39.000Z","dependencies_parsed_at":"2024-11-13T16:41:40.166Z","dependency_job_id":"cc9b7fd8-8a90-41b4-bfb7-3462c0bc2c01","html_url":"https://github.com/pcdshub/whatrecord","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/pcdshub/whatrecord","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcdshub%2Fwhatrecord","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcdshub%2Fwhatrecord/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcdshub%2Fwhatrecord/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcdshub%2Fwhatrecord/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pcdshub","download_url":"https://codeload.github.com/pcdshub/whatrecord/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pcdshub%2Fwhatrecord/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28337870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["epics","happi","iocs","lark-parser","pytmc"],"created_at":"2026-01-12T10:02:07.650Z","updated_at":"2026-01-12T10:02:07.703Z","avatar_url":"https://github.com/pcdshub.png","language":"Python","funding_links":[],"categories":["Applications"],"sub_categories":["IOC \u0026 Database Tools"],"readme":"===============================\nwhatrecord\n===============================\n\n.. image:: https://img.shields.io/travis/pcdshub/whatrecord.svg\n        :target: https://travis-ci.org/pcdshub/whatrecord\n\n.. image:: https://img.shields.io/pypi/v/whatrecord.svg\n        :target: https://pypi.python.org/pypi/whatrecord\n\n\nEPICS IOC record search and meta information tool.\n\nSpiritual successor of recordwhat.\n\nhttps://pcdshub.github.io/whatrecord/\n\nWhat?\n-----\n\nLark grammar-based parsers which parse any of the following into easy-to-use\nPython dataclasses:\n\n* EPICS access security files (.acf)\n* EPICS autosave save files (.sav)\n* EPICS V3 database files\n* EPICS V4 database files\n* EPICS msi-style template/substitutions files (.template/.substitutions)\n* EPICS gateway configuration (.pvlist)\n* EPICS sequencer state notation language programs (.st)\n* EPICS StreamDevice protocols (.proto)\n\nAll of the above can be easily serialized to JSON for interoperability.\n\nPseudo-IOC shell interpreter:\n\n* Reads st.cmd files as if it were an IOC\n* Loads and lints record files (and other supported formats above)\n* Builds inter- and intra- IOC PV relationship graphs\n* Stores context information about where each record/field/etc came from\n\nAPI server\n\n* IOC finder (LCLS IOC manager, list of files, or external script)\n* Provides access to all parsed information above\n* Preliminary asyncio-based client to talk with the server\n\nFrontend\n\n* User-friendly vue.js v3 frontend that communicates with API server\n* Interfaces for:\n    - Searching for records\n    - Record relationships (processing and links, cross-IOC links)\n    - IOC information\n    - Gateway configuration overview\n    - Duplicate records\n    - Optional plugins\n\nPlugins\n\n* happi devices\n* Simple LDAP search (LCLS hosts, \"netconfig\")\n* LCLS-specific epicsArch / logbook DAQ PVs\n* TwinCAT PLC source code (pytmc)\n\nMakefile / build system information\n\n* Determine build dependencies from a ``Makefile``\n* Recursively inspect sub-dependencies\n* Graph IOC dependency information or output it as JSON\n\nCommand-line tools\n\n* ``whatrecord lint`` - lint a database\n* ``whatrecord parse`` - parse supported formats\n* ``whatrecord server`` - start the API server\n* ``whatrecord graph`` - graph PV relationships, SNL diagrams, IOC dependencies\n\nRecord?\n-------\n\nhttps://docs.epics-controls.org/en/latest/guides/EPICS_Process_Database_Concepts.html#the-epics-process-database\n\nRequirements\n------------\n\nRequirements:\n\n* Python 3.9\n* aiohttp\n* apischema[graphql]\n* graphviz\n* jinja2\n* lark\n\nDocker\n------\n\nSee `/docker \u003c/docker\u003e`_ to set up a Python 3.10-based whatrecord container.\nA docker-compose configuration for starting up the frontend/backend servers\nis also provided.  Note that the default configuration only indexes the\nwhatrecord-provided IOCs.\n\nFrontend Screenshots\n--------------------\n\nSearch for records and view relationships:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_1.png\n\nView StreamDevice protocol information:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_2.png\n\nSee where your qsrv pvAccess keys come from:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_3.png\n\nSee access security settings:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_4.png\n\nView all of your IOCs in one place and browse their records by type:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_5.png\n\nView inter-IOC record relationships:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_6.png\n\nView all of your ophyd/happi devices and their relevant PVs:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_7.png\n\nView LDAP-provided settings:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_8.png\n\n(LCLS-specific) View epicsArch DAQ PVs:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_9.png\n\nView gateway PVList configurations:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_10.png\n\nView record duplicates:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_11.png\n\nView API server logs:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_12.png\n\nSee per-parameter values:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_13.png\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_15.png\n\nSee database lint:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_14.png\n\n\nOther Screenshots\n-----------------\n\nUse ``whatrecord deps --graph`` to inspect IOCs/modules with ``make`` and\ngenerate a dependency graph of modules:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_16.png\n\nUse ``whatrecord graph`` to graph state notation language ``.st`` file\nlogic:\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_17.png\n\n.. image:: https://github.com/pcdshub/whatrecord/raw/assets/screenshot_18.png\n\nUse an external tool like ``jq`` to sift through information from whatrecord's\nJSON output:\n\n.. code::\n\n  $ whatrecord parse whatrecord/tests/iocs/db/pva/iq.db | jq '.records[] | [.name, .record_type, .fields.OUT.value]'\n  [\n    \"$(PREFIX)Rate\",\n    \"ao\",\n    \"$(PREFIX)dly_.ODLY NPP\"\n  ]\n  [\n    \"$(PREFIX)Delta\",\n    \"ao\",\n    null\n  ]\n  ...\n\n  $ whatrecord parse whatrecord/tests/iocs/db/pva/iq.db | jq '.records[] | [ .name, .info[\"Q:group\"]]'\n  [\n    \"$(PREFIX)Rate\",\n    null\n  ]\n  [\n    \"$(PREFIX)Phase:I\",\n    {\n      \"$(PREFIX)iq\": {\n        \"phas.i\": {\n          \"+type\": \"plain\",\n          \"+channel\": \"VAL\"\n        }\n      }\n    }\n  ]\n  ...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpcdshub%2Fwhatrecord","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpcdshub%2Fwhatrecord","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpcdshub%2Fwhatrecord/lists"}