source: trunk/include/MySql.h @ 704

Revision 677, 8.9 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 MYSQL_H /* Prevent multiple inclusion */
13#define MYSQL_H 1
14
15#include <list>
16#include <mysql.h>
17
18#include "arm4_shm.h"
19#include "arm4_db.h"
20#include "Arm4dbConfig.h"
21
22#define SQLITE_DB_NAME                                                  "arm4.db"
23 
24class MySql : public Arm4db
25{
26public:
27        /* Constructors */
28        MySql (const Arm4dbConfig &config);
29
30        /* Destructors */
31        virtual ~MySql ();
32
33        /* Accessors */
34
35        /* Mutators */
36
37        /* Operations */
38        void initializeLibrary (void);
39        void initializeThread (void);
40
41        arm_error_t openDatabases (void);
42        arm_error_t openDatabasesReadOnly (void);
43        arm_error_t closeDatabasesNoLock (void);
44
45        arm_error_t initializeSequences (arm4_shm_header_t *header_ptr);
46
47        arm_error_t processApplicationInstances (const arm4_shm_application_instance_t *app_instance_ptr);
48        arm_error_t processApplicationGroup (const arm4_shm_property_t *group_ptr);
49        arm_error_t processApplicationInstanceId (const arm4_shm_property_t *property_ptr);
50        arm_error_t processApplicationContext (const arm4_shm_context_property_t *property_ptr);
51        arm_error_t processApplicationAddress (const arm4_shm_address_t *address_ptr);
52        arm_error_t processTransactionInstances (const arm4_shm_transaction_instance_t *tran_instance_ptr);
53        arm_error_t processTransactionContext (const arm4_shm_context_property_t *property_ptr);
54        arm_error_t processTransactionUri (const arm4_shm_uri_t *uri_ptr);
55        arm_error_t processTransactionMetricValue (const arm4_shm_metric_value_t *metric_ptr);
56        arm_error_t processTransactionUser (const arm4_shm_user_t *user_ptr);
57        arm_error_t processTransactionDiag (const arm4_shm_diag_t *diag_ptr);
58        arm_error_t processCorrelators (const arm4_shm_correlator_t *correlator_ptr);
59        arm_error_t processSequence (const arm4_shm_db_sequence_t *sequence_ptr);
60        arm_error_t processRegisterApplication (const arm4_shm_register_application_t *application_ptr,
61                arm_id_t *appid_ptr,
62                arm_boolean_t *is_new_ptr);
63        arm_error_t processRegisterApplicationIdentity (const arm4_shm_register_application_identity_t *identity_ptr);
64        arm_error_t processRegisterApplicationContext (const arm4_shm_register_application_context_t *context_ptr);
65        arm_error_t processRegisterTransaction (const arm4_shm_register_transaction_t *transaction_ptr,
66                arm_id_t *tranid_ptr,
67                arm_boolean_t *is_new_ptr);
68        arm_error_t processRegisterTransactionIdentity (const arm4_shm_register_application_identity_t *identity_ptr);
69        arm_error_t processRegisterTransactionContext (const arm4_shm_register_application_context_t *context_ptr);
70        arm_error_t processRegisterTransactionUri (const arm4_shm_register_transaction_uri_t *uri_ptr);
71        arm_error_t processRegisterTransactionMetricBinding (const arm4_shm_register_transaction_metric_t *metric_ptr);
72        arm_error_t processRegisterMetric (arm4_shm_register_metric_t *metric_ptr,
73                arm_id_t *metricid_ptr);
74        arm_error_t processTraceStats (arm_time_t sample_time, arm4db_transaction_trace_stats_t *stats_ptr, int transaction_count);
75
76        void saveApplicationDefinition (const arm_id_t &appl_id, const application_record_t &application);
77        void saveApplicationIdentity (const arm_id_t &appl_id, const property_record_t &property);
78        void saveApplicationContext (const arm_id_t &appl_id, const indexed_property_name_record_t &property);
79
80        void saveMetricDefinition (const arm_id_t &metric_id, const metric_record_t &metric);
81       
82        void saveTransactionDefinition (const arm_id_t &tran_id, const transaction_record_t &transaction);
83        void saveTransactionIdentity (const arm_id_t &tran_id, const property_record_t &property);
84        void saveTransactionContext (const arm_id_t &tran_id, const indexed_property_name_record_t &property);
85        void saveTransactionUri (const arm_id_t &tran_id, const char *uri_ptr);
86        void saveTransactionMetric (const arm_id_t &tran_id, const arm_metric_binding_t &binding);
87
88        void saveApplicationInstance (const arm_app_start_handle_t app_handle, const application_instance_record_t &application);
89        void saveAppInstanceContextValue (const arm_app_start_handle_t app_handle, const indexed_property_value_record_t &property);
90        void saveAppInstanceGroup (const arm_app_start_handle_t app_handle, const char *group_ptr);
91        void saveAppInstanceName (const arm_app_start_handle_t app_handle, const char *name_ptr);
92
93        void saveTransactionInstance (const arm_tran_start_handle_t tran_handle, const transaction_instance_record_t &transaction);
94        void saveTranInstanceContextValue (const arm_tran_start_handle_t tran_handle, const indexed_property_value_record_t &property);
95        void saveTranInstanceMetricValue (const arm_tran_start_handle_t tran_handle, const metric_value_record_t &metric);
96        void saveTranInstanceUri (const arm_tran_start_handle_t tran_handle, const char *uri_ptr);
97        void saveTranInstanceUser (const arm_tran_start_handle_t tran_handle, const user_record_t &user);
98        void saveTranInstanceDiag (const arm_tran_start_handle_t tran_handle, const char *diag_ptr);
99
100        void saveTraceStats (const arm_time_t sample_time, const arm4db_transaction_trace_stats_t &trace_stats);
101
102        /* Get transaction stats */
103        virtual void *getStats (void);
104
105    /* Reporting functions */
106    virtual void printSummaries (void) const;
107    virtual void printTransactions (void) const;
108
109    virtual std::list<arm_id_t> *getApplicationList (void);
110    virtual std::list<arm_id_t> *getTransactionList (void);
111    virtual std::list<arm_id_t> *getTransactionList (const arm_id_t &app_id);
112        virtual std::list<arm_tran_start_handle_t> *getTransactionInstanceList (const arm_id_t &tran_id);
113   
114    virtual arm_error_t getApplicationInformation (const arm_id_t &app_id, arm4db_application_summary_t *summary_ptr);
115    virtual arm_error_t getTransactionInformation (const arm_id_t &tran_id, arm4db_transaction_summary_t *summary_ptr);
116   
117    virtual void setTransactionTraceInformation (const arm_id_t &tran_id, const arm4db_transaction_summary_t &summary);
118   
119    virtual std::ostream& exportApplicationDefinitions (std::ostream &os) const;
120    virtual std::ostream& exportTransactionDefinitions (std::ostream &os) const;
121    virtual std::ostream& exportMetricDefinitions (std::ostream &os) const;
122    virtual std::ostream& exportApplications (std::ostream &os) const;
123    virtual std::ostream& exportTransactions (std::ostream &os) const;
124    virtual std::ostream& exportTraceStats (std::ostream &os) const;
125
126        /* Operators */
127
128private:
129        /* Mark these as private to prevent their use */
130        MySql ();
131        MySql (const Arm4db &);
132        MySql &operator= (const Arm4db &);
133       
134        /* The active database handle */
135        MYSQL *m_db;
136        bool m_readOnly;
137       
138        arm_error_t openDatabasesNoLock (void);
139        arm_error_t openOrCreateDatabasesNoLock (void);
140        arm_error_t initializeSequence (int index, arm4_shm_header_t *header_ptr);
141       
142        void logError (void) const;
143        void logError (const char *error_point) const;
144        void logError (const std::string &error_point) const { logError (error_point.c_str ()); }
145
146        std::string fullDbName (void);
147        bool dbExists (void);
148       
149        // Field accessors
150        arm_int64_t fieldBigint (const char *value) const;
151        arm_int32_t fieldInt (const char *value) const;
152        arm_int16_t fieldTinyint (const char *value) const;
153
154        std::ostream& exportApplicationIdentity (std::ostream &os, const arm_id_t &appl_id) const;
155        std::ostream& exportApplicationContext (std::ostream &os, const arm_id_t &appl_id) const;
156       
157        std::ostream& exportTransactionIdentity (std::ostream &os, const arm_id_t &tran_id) const;
158        std::ostream& exportTransactionContext (std::ostream &os, const arm_id_t &tran_id) const;
159        std::ostream& exportTransactionUri (std::ostream &os, const arm_id_t &tran_id) const;
160        std::ostream& exportTransactionMetricBinding (std::ostream &os, const arm_id_t &tran_id) const;
161
162        std::ostream& exportApplicationGroup (std::ostream &os, arm_app_start_handle_t app_handle) const;
163        std::ostream& exportApplicationInstanceNames (std::ostream &os, arm_app_start_handle_t app_handle) const;
164        std::ostream& exportApplicationContextValues (std::ostream &os, arm_app_start_handle_t app_handle) const;
165
166        std::ostream& exportTransactionContextValues (std::ostream &os, arm_tran_start_handle_t tran_handle) const;
167        std::ostream& exportTransactionContextUri (std::ostream &os, arm_tran_start_handle_t tran_handle) const;
168        std::ostream& exportTransactionContextMetricValue (std::ostream &os, arm_tran_start_handle_t tran_handle) const;
169        std::ostream& exportTransactionContextUser (std::ostream &os, arm_tran_start_handle_t tran_handle) const;
170        std::ostream& exportTransactionContextDiag (std::ostream &os, arm_tran_start_handle_t tran_handle) const;
171        std::ostream& exportCorrelators (std::ostream &os, arm_tran_start_handle_t tran_handle) const;
172};
173
174#endif /* MYSQL_H */
Note: See TracBrowser for help on using the repository browser.