MPS History Server (mpshist) is a server application for saving MPS messages to Oracle.
#Current Version
#Development
#Programmer's Guide
#User's Guide
#References
Current Version
0-0-5
Development
Overview
Background
The MPS History Server (mpshist) is a software system for storing MPS History Messages in an RDB.
Thesaurus
- LP: link processor
Requirements
Use Cases
- User must figure out what's going on with MPS (performance statistics).
- Author: snorum
- Reason: Our mission.
- User must search and do analysis on messages.
- Author: snorum
- Reason: For diagnostics.
- User must be able to register mpshist with LP.
- Author: snorum
- Reason: Zero configuration, dynamic change.
- User must switch from one mpshist to another.
- Author: snorum
- Reason: Prevent loss of messages.
- User must be able to access all info messages.
- Author: snorum
- Reason: diagnostics
- User must be able to specify path to ConfigDB.
- Author: snorum
- Reason: changes in the hardware.
Functional Specification
- mpshist must capture all messages.
- Origin: Use Case #1
- How to test: All accepted messages must be in the database.
- mpshist must write all messages to RDB.
- Origin: Use Case #2
- How to test: All accepted messages must be in the database.
- mpshist must send notification messages to LP at a rate of 0.2 Hz.
- Origin: Use Case #3
- How to test: Get messages from LP.
- One must be able to run several copies of mpshist.
- Origin: Use Case #4
- How to test: Have 2 of them running.
- mpshist must log all info messages.
- Origin: Use Case #5
- How to test: Look at the log.
- mpshist must accept the path to ConfigDB as a command-line parameter.
- Origin: Use Case #6
- How to test: Finds ConfigDB as specified through command-line.
Constraints
- Messages are streamed at up to 1MB/sec.
- mpshist must support Oracle RDB.
- LP is a time-critical VME IOC (2.8 msecs delay accepted).
- LP might not be sending for a while, so no timeouts must be introduced.
- Connect only to 1 mpshist at a time.
Design
- Use WaitFreeWriteQueue for message repository. (needs RTJ)
- Send a datagram to a host-name of LP on port 30000.
- 2 byte header: protocol version 1, message type: notification 2
- 2 bytes for port number
- Use server port from 30001 - 30009 to receive history messages.
Comments
- Open to the possibility of sending messages directly from LP to RDB.
- Create a Config module
Programmer's Guide
MPS Config
Oracle
JDBC Url
jdbc:oracle:thin:MPS_HISTORY/%s@slac-oracle02.slac.stanford.edu:1521:SLACDEV
where %s = the current password.
Schema
Procedures
BEGIN MPS_HISTORY.MPS_HISTORY_PKG.DML_%s1 (%s2); END;
where
%s1 = table name
%s2 = CSVs in the same order as in the #Schema (top-to-bottom = left-to-right); ignore the ID column; replace the FKs with enums from the referenced table.
User's Guide
Scripts
You have to run mpshist on lcls-daemon2 as laci
/etc/init.d/st.mpshist start
To stop mpshist
/etc/init.d/st.mpshist stop
Check if a server is connected (on production)
iocConsole ioc-bsy0-mp01
Cmlog
The cmlog facility is "MPS History".
References
http://java.sun.com/docs/books/tutorial/networking/ (esp. sockets and datagrams)
http://darksleep.com/player/JavaAndUnsignedTypes.html (java types from/to bytes)