source: trunk/include/Arm4db.h @ 704

Revision 677, 15.1 KB checked in by dcarter, 3 years ago (diff)

see #118: use C++ exception mechanism

Line 
1/**********************************************************************
2 * Copyright (c) 2005-2008 David Carter <dcarter@arm4.org> and others.
3 * All rights reserved.   This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * David Carter - Initial API and implementation
10 **********************************************************************/
11
12#ifndef LIBARM4DB_H     /* Prevent multiple inclusion */
13#define LIBARM4DB_H 1
14
15#include <list>
16#include <iostream>
17#include <libxml/xmlreader.h>
18
19#include "arm4_shm.h"
20#include "arm4_db.h"
21#include "Arm4dbConfig.h"
22#include "Arm4dbBackEnd.h"
23 
24class Arm4db {
25public:
26        /* Constructors */
27
28        /* Destructors */
29        virtual ~Arm4db ();
30
31        /* Accessors */
32
33        /* Mutators */
34
35        /* Operations */
36        static Arm4db *getArm4db (const Arm4dbConfig &config); /* Singleton factory method */
37        static Arm4db *getArm4db (void);
38       
39        arm_error_t closeDatabases (void);
40        arm_error_t removeDatabases (void);
41
42    std::ostream& exportDefinitions (std::ostream &os) const;
43    std::ostream& exportAll (std::ostream &os) const;
44    void import (const char *filename_ptr);
45        void importFromMemory (const std::string &xml);
46
47        void initializeThread (void) { m_backendPtr->initializeThread (); }
48
49        arm_error_t openDatabases (void) { return m_backendPtr->openDatabases (); }
50        arm_error_t openDatabasesReadOnly (void) { return m_backendPtr->openDatabasesReadOnly (); }
51        arm_error_t closeDatabasesNoLock (void) { return m_backendPtr->closeDatabasesNoLock (); }
52
53        arm_error_t initializeSequences (arm4_shm_header_t *header_ptr) { return m_backendPtr->initializeSequences (header_ptr); }
54
55        arm_error_t processApplicationInstances (const arm4_shm_application_instance_t *app_instance_ptr)
56                { return m_backendPtr->processApplicationInstances (app_instance_ptr); }
57        arm_error_t processApplicationGroup (const arm4_shm_property_t *group_ptr)
58                { return m_backendPtr->processApplicationGroup (group_ptr); }
59        arm_error_t processApplicationInstanceId (const arm4_shm_property_t *property_ptr)
60                { return m_backendPtr->processApplicationInstanceId (property_ptr); }
61        arm_error_t processApplicationContext (const arm4_shm_context_property_t *property_ptr)
62                { return m_backendPtr->processApplicationContext (property_ptr); }
63        arm_error_t processApplicationAddress (const arm4_shm_address_t *address_ptr)
64                { return m_backendPtr->processApplicationAddress (address_ptr); }
65        arm_error_t processTransactionInstances (const arm4_shm_transaction_instance_t *tran_instance_ptr)
66                { return m_backendPtr->processTransactionInstances (tran_instance_ptr); }
67        arm_error_t processTransactionContext (const arm4_shm_context_property_t *property_ptr)
68                { return m_backendPtr->processTransactionContext (property_ptr); }
69        arm_error_t processTransactionUri (const arm4_shm_uri_t *uri_ptr)
70                { return m_backendPtr->processTransactionUri (uri_ptr); }
71        arm_error_t processTransactionMetricValue (const arm4_shm_metric_value_t *metric_ptr)
72                { return m_backendPtr->processTransactionMetricValue (metric_ptr); }
73        arm_error_t processTransactionUser (const arm4_shm_user_t *user_ptr)
74                { return m_backendPtr->processTransactionUser (user_ptr); }
75        arm_error_t processTransactionDiag (const arm4_shm_diag_t *diag_ptr)
76                { return m_backendPtr->processTransactionDiag (diag_ptr); }
77        arm_error_t processCorrelators (const arm4_shm_correlator_t *correlator_ptr)
78                { return m_backendPtr->processCorrelators (correlator_ptr); }
79        arm_error_t processSequence (const arm4_shm_db_sequence_t *sequence_ptr)
80                { return m_backendPtr->processSequence (sequence_ptr); }
81        arm_error_t processRegisterApplication (const arm4_shm_register_application_t *application_ptr,
82                arm_id_t *appid_ptr,
83                arm_boolean_t *is_new_ptr)
84                { return m_backendPtr->processRegisterApplication (application_ptr, appid_ptr, is_new_ptr); }
85        arm_error_t processRegisterApplicationIdentity (const arm4_shm_register_application_identity_t *identity_ptr)
86                { return m_backendPtr->processRegisterApplicationIdentity (identity_ptr); }
87        arm_error_t processRegisterApplicationContext (const arm4_shm_register_application_context_t *context_ptr)
88                { return m_backendPtr->processRegisterApplicationContext (context_ptr); }
89        arm_error_t processRegisterTransaction (const arm4_shm_register_transaction_t *transaction_ptr,
90                arm_id_t *tranid_ptr,
91                arm_boolean_t *is_new_ptr)
92                { return m_backendPtr->processRegisterTransaction (transaction_ptr, tranid_ptr, is_new_ptr); }
93        arm_error_t processRegisterTransactionIdentity (const arm4_shm_register_application_identity_t *identity_ptr)
94                { return m_backendPtr->processRegisterTransactionIdentity (identity_ptr); }
95        arm_error_t processRegisterTransactionContext (const arm4_shm_register_application_context_t *context_ptr)
96                { return m_backendPtr->processRegisterTransactionContext (context_ptr); }
97        arm_error_t processRegisterTransactionUri (const arm4_shm_register_transaction_uri_t *uri_ptr)
98                { return m_backendPtr->processRegisterTransactionUri (uri_ptr); }
99        arm_error_t processRegisterTransactionMetricBinding (const arm4_shm_register_transaction_metric_t *metric_ptr)
100                { return m_backendPtr->processRegisterTransactionMetricBinding (metric_ptr); }
101        arm_error_t processRegisterMetric (arm4_shm_register_metric_t *metric_ptr, arm_id_t *metricid_ptr)
102                { return m_backendPtr->processRegisterMetric (metric_ptr, metricid_ptr); }
103        arm_error_t processTraceStats (arm_time_t sample_time, arm4db_transaction_trace_stats_t *stats_ptr, int transaction_count)
104                { return m_backendPtr->processTraceStats (sample_time, stats_ptr, transaction_count); }
105
106        void saveApplicationDefinition (const arm_id_t &appl_id, const application_record_t &application)
107                { m_backendPtr->saveApplicationDefinition (appl_id, application); }
108        void saveApplicationIdentity (const arm_id_t &appl_id, const property_record_t &property)
109                { m_backendPtr->saveApplicationIdentity (appl_id, property); }
110        void saveApplicationContext (const arm_id_t &appl_id, const indexed_property_name_record_t &property)
111                { m_backendPtr->saveApplicationContext (appl_id, property); }
112       
113        void saveMetricDefinition (const arm_id_t &metric_id, const metric_record_t &metric)
114                { m_backendPtr->saveMetricDefinition (metric_id, metric); }
115       
116        void saveTransactionDefinition (const arm_id_t &tran_id, const transaction_record_t &transaction)
117                { m_backendPtr->saveTransactionDefinition (tran_id, transaction); }
118        void saveTransactionIdentity (const arm_id_t &tran_id, const property_record_t &property)
119                { m_backendPtr->saveTransactionIdentity (tran_id, property); }
120        void saveTransactionContext (const arm_id_t &tran_id, const indexed_property_name_record_t &property)
121                { m_backendPtr->saveTransactionContext (tran_id, property); }
122        void saveTransactionUri (const arm_id_t &tran_id, const char *uri_ptr)
123                { m_backendPtr->saveTransactionUri (tran_id, uri_ptr); }
124        void saveTransactionMetric (const arm_id_t &tran_id, const arm_metric_binding_t &binding)
125                { m_backendPtr->saveTransactionMetric (tran_id, binding); }
126       
127        void saveApplicationInstance (const arm_app_start_handle_t app_handle, const application_instance_record_t &application)
128                { m_backendPtr->saveApplicationInstance (app_handle, application); }
129        void saveAppInstanceContextValue (const arm_app_start_handle_t app_handle, const indexed_property_value_record_t &property)
130                { m_backendPtr->saveAppInstanceContextValue (app_handle, property); }
131        void saveAppInstanceGroup (const arm_app_start_handle_t app_handle, const char *group_ptr)
132                { m_backendPtr->saveAppInstanceGroup (app_handle, group_ptr); }
133        void saveAppInstanceName (const arm_app_start_handle_t app_handle, const char *name_ptr)
134                { m_backendPtr->saveAppInstanceName (app_handle, name_ptr); }
135        void saveAppInstanceAddress (const arm_app_start_handle_t app_handle, const application_address_record_t &address_value)
136                { m_backendPtr->saveAppInstanceAddress (app_handle, address_value); }
137
138        void saveTransactionInstance (const arm_tran_start_handle_t tran_handle, const transaction_instance_record_t &transaction)
139                { m_backendPtr->saveTransactionInstance (tran_handle, transaction); }
140        void saveTranInstanceContextValue (const arm_tran_start_handle_t tran_handle, const indexed_property_value_record_t &property)
141                { m_backendPtr->saveTranInstanceContextValue (tran_handle, property); }
142        void saveTranInstanceMetricValue (const arm_tran_start_handle_t tran_handle, const metric_value_record_t &metric)
143                { m_backendPtr->saveTranInstanceMetricValue (tran_handle, metric); }
144        void saveTranInstanceUri (const arm_tran_start_handle_t tran_handle, const char *uri_ptr)
145                { m_backendPtr->saveTranInstanceUri (tran_handle, uri_ptr); }
146        void saveTranInstanceUser (const arm_tran_start_handle_t tran_handle, const user_record_t &user)
147                { m_backendPtr->saveTranInstanceUser (tran_handle, user); }
148        void saveTranInstanceDiag (const arm_tran_start_handle_t tran_handle, const char *diag_ptr)
149                { m_backendPtr->saveTranInstanceDiag (tran_handle, diag_ptr); }
150        void saveTranCorrelator (const arm_tran_start_handle_t tran_handle, const arm_correlator_t *correlator_ptr)
151                { m_backendPtr->saveTranCorrelator (tran_handle, correlator_ptr); }
152        void saveTranParentCorrelator (const arm_tran_start_handle_t tran_handle, const arm_correlator_t *correlator_ptr)
153                { m_backendPtr->saveTranParentCorrelator (tran_handle, correlator_ptr); }
154
155        void saveTraceStats (const arm_time_t sample_time, const arm4db_transaction_trace_stats_t &trace_stats)
156                { m_backendPtr->saveTraceStats (sample_time, trace_stats); }
157
158        /* Checkpoint the database transactions */
159        void checkpoint (void) { m_backendPtr->checkpoint (); }
160       
161        /* Get transaction stats */
162        void *getStats (void) { return m_backendPtr->getStats (); }
163
164        /* Debugging routines */
165        void dump (void) const { m_backendPtr->dump (); }
166       
167        /* Database backup and rollover */
168        void backup (void) { m_backendPtr->backup (); }
169
170    /* Reporting functions */
171    void printSummaries (void) const { m_backendPtr->printSummaries (); }
172    void printTransactions (void) const { m_backendPtr->printTransactions (); }
173   
174    std::list<arm_id_t> *getApplicationList (void)
175                { return m_backendPtr->getApplicationList (); }
176    std::list<arm_id_t> *getTransactionList (void)
177                { return m_backendPtr->getTransactionList (); }
178    std::list<arm_id_t> *getTransactionList (const arm_id_t &app_id)
179                { return m_backendPtr->getTransactionList (app_id); }
180        std::list<arm_tran_start_handle_t> *getTransactionInstanceList (const arm_id_t &tran_id)
181                { return m_backendPtr->getTransactionInstanceList (tran_id); }
182        int getApplicationCount (void)
183                { return m_backendPtr->getApplicationCount (); }
184        int getTransactionCount (void)
185                { return m_backendPtr->getTransactionCount (); }
186        int getTransactionCount (const arm_id_t &app_id)
187                { return m_backendPtr->getTransactionCount (app_id); }
188   
189    arm_error_t getApplicationInformation (const arm_id_t &app_id, arm4db_application_summary_t *summary_ptr)
190                { return m_backendPtr->getApplicationInformation (app_id, summary_ptr); }
191    arm_error_t getTransactionInformation (const arm_id_t &tran_id, arm4db_transaction_summary_t *summary_ptr)
192                { return m_backendPtr->getTransactionInformation (tran_id, summary_ptr); }
193        const arm_correlator_t *getCorrelator (arm_tran_start_handle_t tran_handle, arm_correlator_t *correlator_ptr)
194                { return m_backendPtr->getCorrelator (tran_handle, correlator_ptr); }
195        const arm_correlator_t *getParentCorrelator (arm_tran_start_handle_t tran_handle, arm_correlator_t *correlator_ptr)
196                { return m_backendPtr->getParentCorrelator (tran_handle, correlator_ptr); }
197   
198    void setTransactionTraceInformation (const arm_id_t &tran_id, const arm4db_transaction_summary_t &summary)
199                { m_backendPtr->setTransactionTraceInformation (tran_id, summary); }
200   
201    std::ostream& exportApplicationDefinitions (std::ostream &os) const
202                { return m_backendPtr->exportApplicationDefinitions (os); }
203    std::ostream& exportTransactionDefinitions (std::ostream &os) const
204                { return m_backendPtr->exportTransactionDefinitions (os); }
205    std::ostream& exportMetricDefinitions (std::ostream &os) const
206                { return m_backendPtr->exportMetricDefinitions (os); }
207    std::ostream& exportApplications (std::ostream &os) const
208                { return m_backendPtr->exportApplications (os); }
209    std::ostream& exportTransactions (std::ostream &os) const
210                { return m_backendPtr->exportTransactions (os); }
211    std::ostream& exportTraceStats (std::ostream &os) const
212                { return m_backendPtr->exportTraceStats (os); }
213
214        /* Operators */
215
216private:
217        /* The main constructor is protected so we can implement a factory */
218        Arm4db ();
219
220        /* Mark these as private to prevent their use */
221        Arm4db (const Arm4db &);
222        Arm4db &operator= (const Arm4db &);
223       
224        static const Arm4dbConfig &getConfig (void) { return Arm4dbConfig::getConfig (); }
225        void setBackEnd (void);
226        void initializeLibrary (void) { m_backendPtr->initializeLibrary (); }
227
228        // XML Parser routines
229        void streamReader(xmlTextReaderPtr reader);
230        void streamFile(const char *filename);
231        void streamFileFromMemory(const std::string &xml);
232       
233        const xmlChar *getTextNode(xmlTextReaderPtr reader);
234        arm_int32_t getIntNode(xmlTextReaderPtr reader);
235        arm_int64_t getInt64Node(xmlTextReaderPtr reader);
236        void getTimeNode(xmlTextReaderPtr reader, arm_time_t &time_value);
237        void getIdNode(xmlTextReaderPtr reader, arm_id_t &id);
238        void getDigestNode(xmlTextReaderPtr reader, char *digest_ptr);
239        void getAddressNode(xmlTextReaderPtr reader, arm_uint8_t *address_ptr);
240        void getCorrelatorNode(xmlTextReaderPtr reader, arm_correlator_t *correlator_ptr);
241        void getMetricNode(xmlTextReaderPtr reader, metric_value_record_t &metric);
242       
243        void processAnyNode(xmlTextReaderPtr reader);
244       
245        void processArm4ApplicationDefinitionNode(xmlTextReaderPtr reader);
246        void processApplicationIdentity(xmlTextReaderPtr reader, const arm_id_t &appl_id);
247        void processApplicationContext(xmlTextReaderPtr reader, const arm_id_t &appl_id);
248
249        void processArm4MetricDefinitionNode(xmlTextReaderPtr reader);
250
251        void processArm4TransactionDefinitionNode(xmlTextReaderPtr reader);
252        void processTransactionIdentity(xmlTextReaderPtr reader, const arm_id_t &tran_id);
253        void processTransactionContext(xmlTextReaderPtr reader, const arm_id_t &tran_id);
254        void processTransactionMetric(xmlTextReaderPtr reader, const arm_id_t &tran_id);
255
256        void processArm4ApplicationInstanceNode(xmlTextReaderPtr reader);
257        void processAppInstanceContextValue(xmlTextReaderPtr reader, const arm_app_start_handle_t app_handle);
258        void processAppInstanceAddress(xmlTextReaderPtr reader, const arm_app_start_handle_t app_handle);
259       
260        void processArm4TransactionInstanceNode(xmlTextReaderPtr reader);
261        void processTranInstanceContextValue(xmlTextReaderPtr reader, const arm_tran_start_handle_t tran_handle);
262        void processTranInstanceMetricValue(xmlTextReaderPtr reader, const arm_tran_start_handle_t tran_handle);
263        void processTranInstanceUser(xmlTextReaderPtr reader, const arm_tran_start_handle_t tran_handle);
264
265        void processArm4TransactionTraceNode(xmlTextReaderPtr reader);
266
267        void processArm4DefinitionsNode(xmlTextReaderPtr reader);
268        void processArm4InstancesNode(xmlTextReaderPtr reader);
269        void processArm4Node(xmlTextReaderPtr reader);
270        void processRootNode(xmlTextReaderPtr reader);
271
272
273        static Arm4dbBackEnd *m_backendPtr; // The actual database backend
274        static Arm4db *m_singletonPtr;  // The current database instance
275};
276
277#endif /* LIBARM4DB_H */
Note: See TracBrowser for help on using the repository browser.