| 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 | |
|---|
| 24 | class MySql : public Arm4db |
|---|
| 25 | { |
|---|
| 26 | public: |
|---|
| 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 | |
|---|
| 128 | private: |
|---|
| 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 */ |
|---|