Architecture
Agent architecture
The MyARM agent architecture is designed to be flexible, efficient and robust. Figure "MyARM overall architecture" gives an overview:

Figure: MyARM overall architecture

Figure: MyARM overall architecture legend
- The ARM instrumented applications (C/C++, C#, Java and Python) uses the ARM 4.0 interfaces to measure ARM transactions
 - The MyARM agent implements the ARM 4.0 interfaces and is linked
(dll or jar) against the instrumented application
- The MyARM agent implementation uses a datasink
(backend) concept to store the measured ARM data. The following
different kinds of datasinks can be used.
- file datasink
 - The file datasink writes the measured ARM data to a file which will be collected by a myarmdaemon
 - tcp datasink
 - The tcp datasink writes the measured ARM data over a TCP/IP connection to a myarmdaemon
 
 - The runtime configuration is used to change the behaviour of a running instrumented application. The runtime configuration is distributed to the instrumented application through a myarmdaemon process which receives runtime configuration data through a TCP/IP connection from the myarmadmin web application
 - A handler uses runtime configurations to adopt the behaviour of the MyARM agent
 - Filestorage component to write/read ARM data to/from a temporary file if the datasink is currently not able to store the data (TCP/IP connection down)
 
 - The MyARM agent implementation uses a datasink
(backend) concept to store the measured ARM data. The following
different kinds of datasinks can be used.
 - The myarmdaemon is configured
- to read in any ARM data files which were written by the file datasink of an instrumented application
 - It will forward the ARM data to a connected myarmdaemon configured as a TCP server
 - reading runtime configurations from disk when new configuration were stored by the TCP datasink
 
 - The myarmdaemon collects and aggregates
ARM data received and provides interfaces for MyARM web
applications
- receives runtime configuration data from the myarmadmin web application using a TCP/IP connection, stores the data into a local file and distributes the runtime configuration to connected myarmdaemon processes
 - aggregates the received ARM data into so-called real time statistics (rts handler)
 - stores any received ARM data depending on configuration
- into a database
 - or in the filesystem based MyARM archive
 
 
 - Database support is provided for SQLite3, MySQL and MariaDB
 - Multiple database connections can be opened to the MySQL or MariaDB database for high transaction loads
 - MyARM archive SQLite3 database used to store ARM metadata (such as application and transaction names)
 - filesystem based MyARM archive to store ARM transaction measurements efficiently and a scalable search using by the myarmbrowser web application
 - CSV export TCP/IP interface to export ARM transaction measurements exactly once
 - MyARM HTTP server started by the myarmdaemon
- myarmbrowser for individual case analysis
 - myarmrtsbrowser and myarmrtsmonitor for statistical analysis and 24 hours monitoring
 - myarmadmin to configure the MyARM system globally
 
 - A standard web browser can be used to access all MyARM web applications
 - MyARM applications
- myarmmanager provides a simple graphical user interface to access all MyARM web applications
 - Command line tools (such as myarmquery) are able to connect to the database directly (besides SQLite3 database)
 
 
