# Presentation: 093354

## The EPICS Channel Archiver

**The EPICS Channel Archiver**

**Timothy Graber****The Center for Advanced Radiation Sources ****The University of Chicago****EPICS "Getting Started" Lecture Series****August 24, 2004**

## Credit for the Archiver goes to:

- Bob Dalesio
- Thomas Birke
- Sergei Chevtsov
- Kay-Uwe Kasemir
- Chris Larrieu
- Craig McChesney
- Peregrine McGehee
- Nick Pattengale

## Channel Archiver

- Channel Access Client.
- Stores Process Variable data in disk files.
- Can post channel access monitors.
- Archive data can be accessed over the web, providing “real-time” data from the beamline from any web browser.
- Additionally, users can look up experimental parameters over the Web from the time of their run.
- Very useful in debugging beamline problems.

## Channel Archiver Version

**1.x is for EPICS base R3.13.x.  There is no active development going on.  (1.10.2)**
**2.x is for EPICS base R3.14.x. These releases are new, they undergo testing at the SNS. **

- http://ics-web1.sns.ornl.gov/ARCHIVER/index.html

- There are presently two versions of the Channel Archiver in use.  The differences between the versions are significant and will be pointed out where appropriate during this presentation.  Since many groups are still using EPICS R3.13.x the earlier version is still relevant.

## Overview

- Data Collection and Storage

- Retrieval Tools

## Tools

**Archiving**
- ArchiveEngine
- 	Command program, does actual archiving
- ArchiveDaemon
- 	Automatically checks ArchiveEngine and starts if necessary (web based)
- 	**Data Retrieval**
- Java Archive Client
- 	Used to browse data, plot, and export data to spread sheets. Uses Archive Data Server
- ArchiveExport
- 	Command line tool, functionality similar to Java Client
- Archive Data Server (Very Useful!)
- 	Gives access to archive data via a XML-RPC server.  Simple functions can be incorporated into many popular programming languages (C, C++, Java, Perl)

## Archiving

## Archive Engine

- The Archive Engine is a Channel Access client that runs on the computer doing the Archiving.
- Loads a configuration file with a list of Process variables as well as monitor/scan information
- File in 2.x version XML
- File in 1.x version ASCII
- Has its own built in web server for additional configuration and stopping.
- Stores archive data to disk
- Needs an index file(2.x)/directory file(1.x) in the subdirectory in which the data is stored.

## ArchiveEngine command-line program

**Syntax:****      **** ArchiveEngine**** ****[options]**** ****<config-file> <dir-file>**
**Options:****-d <description>****	****: Web page description**
**	****-p <port>****	****	****: port for web server**
**	****-l <log>****	****	****: write log file****-nocfg****	****	****: disable online configuration**

**Version 1.x uses a “directory” file**
**Version 2.x uses an “index” file**

## Configuration file ASCII File V1.x

**Configuration file ****ASCII File V1.x**

- Configuration file lists channels to archive

**Scanned****	**
**	**Periodically store most recent value
**Monitor**
- 	Store all incoming values – up to buffer limit
**Original time stamps are stored!**

**# Example: <channel> <period [s]>****15IDB:vac1.VAL 1****15IDB:vac2.VAL 10****# Monitor: might change every 0.2 second****15IDB:vac3.VAL 0.2 Monitor**

## Configuration file XML File (V2.x)

**Configuration file XML File (V2.x)**

**Scanned****	**
**	**Periodically store most recent value
**Monitor**
**	**Store all incoming values – up to buffer limit
**Original time stamps are stored!**

**  ****<?xml version="1.0" encoding="UTF-8" standalone="no" ?> **
**  ****<!DOCTYPE engineconfig***** (View Source for full doctype...)*****> **
**  ****<engineconfig>**
**  ****<write_period>30</write_period> **
**  ****<get_threshold>20</get_threshold> **
**  ****<file_size>30</file_size> **
**  ****<ignored_future>1.0</ignored_future> **
**  ****<buffer_reserve>3</buffer_reserve> **
**  ****<max_repeat_count>120</max_repeat_count> **
** **** ****<group>**
**  ****	****<name>****Vacuum****</name>**** **
**  ****	****<channel>**
**  ****	****	****<name>****15IDB:vac1.VAL****</name>**** **
**  ****	****	****<period>****0.1****</period>**** **
**  ****	****	****<monitor/>**
**  ****	****</channel>**
**  ****</group>**
**  ****</engineconfig>**

**<scan/>**

- Extensible Markup Language (XML) is a cross-platform, extensible, and text-based standard for representing data. It is also a key technology in the development of _[Web services](http://java.sun.com/webservices/index.jsp)__. _

## Note: Keep index & data files together, don’t modify them.

- Legacy issues between 1.x and 2.x

** ****V2.x requires R3.14.4 or later**
**V2.x requires  index files rather directory files to keep track of data files**
**All configuration files are based on XML.  In V1.x, ASCII files were used.**

**In the new release there is a perl script (ConvertEngineConfig.pl) that will convert the archive engine ASCII files to XML files .**

**The ArchiveDataTool  (replaces the ArchiveManager) can be used to convert directory files to index files.**

## Archive Engine Build Configuration

**// Use password mechanism**
**// (for stopping the engine over the web)**
**#undef USE_PASSWD**
**#define DEFAULT_USER    "engine"**
**#define DEFAULT_PASS    "password"   **

**\ChannelArchiver\LibIO\ArchiverConfig.h**

**Location of gnuplot is also a configuration parameter.**

## Engine’s HTTPD

**URL of engine’s HTTPD: http://<machine>:<port>**
**Status & Config., not data!**
**Start/Stop Archiver**

## ArchiveDaemon

- Automatically starts, monitors and restarts ArchiveEngine on local host.
- Has a built-in web server
- Will check status of ArchiveEngine process and restart if necessary

## Data Retrieval

**Data Retrieval**

## XML-RPC Data Server

- Archive 1

**Configuration File**

- Archive 2

- Archive 3

**Data Server**

**Forwards Request**

**Gives Data**

**Web Server**

**Data**
**Client**
**Program**

**Sends Request**

**Forwards Data**

## XML-RPC Function Calls

**archiver.info**
- Returns version information
**archiver.archives**
- Returns archives that the data server can access
**archiver.names**
- Returns channel names and start and stop times
**archiver.values**
- Returne values from a particular archive for a given list of channel names

**Calls can be used in C, C++, Perl**
**See: http://www.xmlrpc.com**

## ArchiveExport

**Syntax:****      **** ArchiveExport**** ****[options]**** ****[index file]**** ****{channel}**
**Options:****-verbose****	****	****: Verbose Mode**
**	****-list****	****	****: List all channels**
**	****-info****	****	****: Time –range info on channels**
**	****-start <time>****	****: Data start time**
**	****-end <time>****	****: Data end time**
**	****-text****	****	****: Status/Severity coulmn**
**	****-match****	****	****: Channel name pattern**
**	****-interpolate****	****: Interpolate Value**
**	****-output <file>****	****: Output data file name**
**	****-gnuplot****	****	****: Generate gnuplot command file**
**	****-Gnuplot****	****	****: Generate plot file**

- Command line tool
- Requires direct connection to local host disk

## Java Archive Client

- Similar to Archive Export
- Uses XML-RPC Server
- Can be launched from a Web page
- Used to browse and plot data
**http://lansce.lanl.gov/ArchiveViewer/**

## MATLAB

- ExportToolsgenerate MATLAB command file
- ASCII, portable
- No MATLAB binaries required
- Full value info,time & status
- Big & slow

## “Fill”, “Interpol.”, ...

- “Fill”, “Interpol.”, ...

## CGI Export

- Presently ChemMatCARS is running the 1.x version of the Archiver.
- Archive data is accessed  over the internet via a CGI program using a web browser.
- Web pages are configured using an ASCII file.
- The program will be ported to the 2.x version of the Archiver.

## Starting the Archive Engine

**Command to start engine**
- Version 1.8.2, built Jul 18 2001, 15:09:09
- USAGE: ArchiveEngine [Options] <config-file> [<directory-file>]
- Options: 	-port <port> WWW server's TCP port (default 4812)
- 	-description <text> description for HTTP display
- 	-log <filename> write logfile
- 	-nocfg disable online configuratio
- Default directory-file: 'freq_directory'

##  Storage Space

-  Storage Space

- Below is a listing of the 15IDA archive directory.  On a typical day an archive file  is ~14Mb.  Some PV’s such as temperature are Archived every 10 seconds

- -rw-r--r--   1 epics    epics    15659818 Sep  3 15:26 20040818-000000
- -rw-r--r--   1 epics    epics    15754854 Aug 20 18:15 20040819-000000
- -rw-r--r--   1 epics    epics    16467719 Sep  2 13:17 20040820-000000
- -rw-r--r--   1 epics    epics    16685808 Aug 22 02:17 20040821-000000
- -rw-r--r--   1 epics    epics    15870058 Aug 23 08:58 20040822-000000
- -rw-r--r--   1 epics    epics    16620334 Aug 26 00:00 20040823-000000
- -rw-r--r--   1 epics    epics    15861902 Aug 25 12:04 20040824-000000
- -rw-r--r--   1 epics    epics    16999390 Sep  1 19:29 20040825-000000
- -rw-r--r--   1 epics    epics    14303632 Sep  1 19:29 20040826-000000
- -rw-r--r--   1 epics    epics    14159348 Sep  1 19:29 20040827-000000
- -rw-r--r--   1 epics    epics    14130316 Aug 29 18:59 20040828-000000
- -rw-r--r--   1 epics    epics    14864007 Aug 30 17:12 20040829-000000
- -rw-r--r--   1 epics    epics    13824859 Sep  1 19:29 20040830-000000
- -rw-r--r--   1 epics    epics    12142632 Sep  1 15:23 20040831-000000
- -rw-r--r--   1 epics    epics    9472051 Sep  2 02:18 20040901-000000
- -rw-r--r--   1 epics    epics    14071606 Sep  3 01:03 20040902-000000
- -rw-r--r--   1 epics    epics    14203620 Sep  4 06:35 20040903-000000
- -rw-r--r--   1 epics    epics    14071378 Sep  5 05:44 20040904-000000
- -rw-r--r--   1 epics    epics    7444274 Sep  5 16:46 20040905-000000
- -rw-r--r--   1 epics    epics        133 Aug  3 10:56 archive_active.lck

- 365*14 Mb= 5.1 Gb/y

- 89 PV’s are being monitored in the FOE at the present time.

## Modifications to CGI export

- Added the ability to describe PV on Page.
- Ability to display a small group of related PV’s on a single web page.
- Manual scaling of each axis.
- Log plotting.
- Choice of left or right axis.
- Easy configuration of Web Page.

## Flow Diagram for Modified CGIExport

## Exercise with Virtual Linac

**epics:cathodeTempM   5 Monitor**
**epics:PM1:intensityM 5 Monitor**
**epics:PM2:intensityM 5 Monitor**
**epics:PM3:intensityM 5 Monitor**
**epics:PM4:intensityM 5 Monitor**
**epics:PM5:intensityM 5 Monitor**
**epics:FC1:intensityM 5 Monitor**

**ArchiveEngine Config File**

## Populating the Web Page with PV’s

**15IDC_MOT**
**idc/idcMotData.txt**
**15IDC_PREAMP**
**idc/idcPreampData.txt**
**15IDC_SCAL1**
**idc/idcScal1Data.txt**
**15IDC_MM4005**
**idc/idcMM4005Data.txt**
**EPICS_CLASS**
**epicsClass/data.txt**

**<a**** ****href="../cgi/CGIExport.cgi?DIRECTORY=../epicsClass/freq_directory&PVGROUP=EPICS_CLASS“****>**
**Vlinac****</a>**
**Vlinac parameters.**

- pvgroup.txt

- data.txt

**Cathode Temperature**
**epics:cathodeTempM**
**Position Monitor 1**
**epics:PM1:intensityM**
**Position Monitor 2**
**epics:PM2:intensityM**
**Position Monitor 3**
**epics:PM3:intensityM**
**Position Monitor 4**
**epics:PM4:intensityM**
**Position Monitor 5**
**epics:PM5:intensityM**
**Faraday Cup 1 **
**epics:FC1:intensityM**

## Web Page Generated by CGIExport

## Demonstration of CGIExport

## Summary

- The Channel Archiver is a Toolset for archiving any Channel Access data.
- Generic retrieval options, scripting, and Matlab allow further analysis.
- The XML-RPC Data Server will allow for relatively easy data retrieval over the web.
- The present CGI Program for data retrieval over the web will be updated to utilize the XML-RPC Data Server