Skip to content
This repository was archived by the owner on Jul 11, 2021. It is now read-only.

Commit 90b87b5

Browse files
committed
add statistics machinery
1 parent 9992fb9 commit 90b87b5

File tree

4 files changed

+355
-39
lines changed

4 files changed

+355
-39
lines changed

redisql_lib/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ pub mod redis;
88
pub mod redis_type;
99
pub mod redisql_error;
1010
pub mod sqlite;
11+
pub mod statistics;
1112
pub mod virtual_tables;

redisql_lib/src/redis.rs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ use community_statement::MultiStatement;
2929

3030
use sqlite as sql;
3131

32+
use statistics::STATISTICS;
33+
3234
#[derive(Clone)]
3335
pub struct ReplicationBook {
3436
data: Arc<RwLock<FnvHashMap<String, (MultiStatement, bool)>>>,
@@ -817,6 +819,10 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
817819
|_| {
818820
let result =
819821
do_execute(&loopdata.get_db(), query);
822+
match result {
823+
Ok(_) => STATISTICS.exec_ok(),
824+
Err(_) => STATISTICS.exec_err(),
825+
}
820826
return_value(&client, result);
821827
},
822828
);
@@ -833,6 +839,20 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
833839
|_| {
834840
let result =
835841
do_query(&loopdata.get_db(), query);
842+
match (&return_method, &result) {
843+
(ReturnMethod::Reply, Ok(_)) => {
844+
STATISTICS.query_ok()
845+
}
846+
(ReturnMethod::Reply, Err(_)) => {
847+
STATISTICS.query_err()
848+
}
849+
(ReturnMethod::Stream { .. }, Ok(_)) => {
850+
STATISTICS.query_into_ok()
851+
}
852+
(ReturnMethod::Stream { .. }, Err(_)) => {
853+
STATISTICS.query_into_err()
854+
}
855+
};
836856
return_value_v2(
837857
&client,
838858
&return_method,
@@ -853,6 +873,10 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
853873
let result = loopdata
854874
.get_replication_book()
855875
.update_statement(identifier, statement);
876+
match result {
877+
Ok(_) => STATISTICS.update_statement_ok(),
878+
Err(_) => STATISTICS.update_statement_err(),
879+
};
856880
return_value(&client, result)
857881
}
858882
Ok(Command::DeleteStatement { identifier, client }) => {
@@ -863,7 +887,10 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
863887
let result = loopdata
864888
.get_replication_book()
865889
.delete_statement(identifier);
866-
890+
match result {
891+
Ok(_) => STATISTICS.delete_statement_ok(),
892+
Err(_) => STATISTICS.delete_statement_err(),
893+
}
867894
return_value(&client, result);
868895
}
869896
Ok(Command::CompileStatement {
@@ -878,6 +905,10 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
878905
let result = loopdata
879906
.get_replication_book()
880907
.insert_new_statement(identifier, statement);
908+
match result {
909+
Ok(_) => STATISTICS.create_statement_ok(),
910+
Err(_) => STATISTICS.create_statement_err(),
911+
}
881912
return_value(&client, result);
882913
}
883914

@@ -896,6 +927,10 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
896927
let result = loopdata
897928
.get_replication_book()
898929
.exec_statement(identifier, &arguments);
930+
match result {
931+
Ok(_) => STATISTICS.exec_statement_ok(),
932+
Err(_) => STATISTICS.exec_statement_err(),
933+
}
899934
return_value(&client, result);
900935
},
901936
);
@@ -915,6 +950,20 @@ pub fn listen_and_execute<'a, L: 'a + LoopData>(
915950
identifier,
916951
arguments.as_slice(),
917952
);
953+
match (&return_method, &result) {
954+
(ReturnMethod::Reply, Ok(_)) => {
955+
STATISTICS.query_statement_ok()
956+
}
957+
(ReturnMethod::Reply, Err(_)) => {
958+
STATISTICS.query_statement_err()
959+
}
960+
(ReturnMethod::Stream { .. }, Ok(_)) => {
961+
STATISTICS.query_statement_into_ok()
962+
}
963+
(ReturnMethod::Stream { .. }, Err(_)) => {
964+
STATISTICS.query_statement_into_err()
965+
}
966+
};
918967
return_value_v2(
919968
&client,
920969
&return_method,

redisql_lib/src/statistics.rs

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
use std::sync::atomic::{AtomicUsize, Ordering};
2+
3+
pub struct Statistics {
4+
create_db: AtomicUsize,
5+
create_db_ok: AtomicUsize,
6+
create_db_err: AtomicUsize,
7+
exec: AtomicUsize,
8+
exec_ok: AtomicUsize,
9+
exec_err: AtomicUsize,
10+
query: AtomicUsize,
11+
query_ok: AtomicUsize,
12+
query_err: AtomicUsize,
13+
query_into: AtomicUsize,
14+
query_into_ok: AtomicUsize,
15+
query_into_err: AtomicUsize,
16+
create_statement: AtomicUsize,
17+
create_statement_ok: AtomicUsize,
18+
create_statement_err: AtomicUsize,
19+
exec_statement: AtomicUsize,
20+
exec_statement_ok: AtomicUsize,
21+
exec_statement_err: AtomicUsize,
22+
update_statement: AtomicUsize,
23+
update_statement_ok: AtomicUsize,
24+
update_statement_err: AtomicUsize,
25+
delete_statement: AtomicUsize,
26+
delete_statement_ok: AtomicUsize,
27+
delete_statement_err: AtomicUsize,
28+
query_statement: AtomicUsize,
29+
query_statement_ok: AtomicUsize,
30+
query_statement_err: AtomicUsize,
31+
query_statement_into: AtomicUsize,
32+
query_statement_into_ok: AtomicUsize,
33+
query_statement_into_err: AtomicUsize,
34+
copy: AtomicUsize,
35+
copy_ok: AtomicUsize,
36+
copy_err: AtomicUsize,
37+
}
38+
39+
pub static STATISTICS: Statistics = Statistics {
40+
create_db: AtomicUsize::new(0),
41+
create_db_ok: AtomicUsize::new(0),
42+
create_db_err: AtomicUsize::new(0),
43+
exec: AtomicUsize::new(0),
44+
exec_ok: AtomicUsize::new(0),
45+
exec_err: AtomicUsize::new(0),
46+
query: AtomicUsize::new(0),
47+
query_ok: AtomicUsize::new(0),
48+
query_err: AtomicUsize::new(0),
49+
query_into: AtomicUsize::new(0),
50+
query_into_ok: AtomicUsize::new(0),
51+
query_into_err: AtomicUsize::new(0),
52+
create_statement: AtomicUsize::new(0),
53+
create_statement_ok: AtomicUsize::new(0),
54+
create_statement_err: AtomicUsize::new(0),
55+
exec_statement: AtomicUsize::new(0),
56+
exec_statement_ok: AtomicUsize::new(0),
57+
exec_statement_err: AtomicUsize::new(0),
58+
update_statement: AtomicUsize::new(0),
59+
update_statement_ok: AtomicUsize::new(0),
60+
update_statement_err: AtomicUsize::new(0),
61+
delete_statement: AtomicUsize::new(0),
62+
delete_statement_ok: AtomicUsize::new(0),
63+
delete_statement_err: AtomicUsize::new(0),
64+
query_statement: AtomicUsize::new(0),
65+
query_statement_ok: AtomicUsize::new(0),
66+
query_statement_err: AtomicUsize::new(0),
67+
query_statement_into: AtomicUsize::new(0),
68+
query_statement_into_ok: AtomicUsize::new(0),
69+
query_statement_into_err: AtomicUsize::new(0),
70+
copy: AtomicUsize::new(0),
71+
copy_ok: AtomicUsize::new(0),
72+
copy_err: AtomicUsize::new(0),
73+
};
74+
75+
impl Statistics {
76+
pub fn create_db(&self) {
77+
STATISTICS.create_db.fetch_add(1, Ordering::Relaxed);
78+
}
79+
pub fn create_db_ok(&self) {
80+
STATISTICS.create_db_ok.fetch_add(1, Ordering::Relaxed);
81+
}
82+
pub fn create_db_err(&self) {
83+
STATISTICS.create_db_err.fetch_add(1, Ordering::Relaxed);
84+
}
85+
pub fn exec(&self) {
86+
STATISTICS.exec.fetch_add(1, Ordering::Relaxed);
87+
}
88+
pub fn exec_ok(&self) {
89+
STATISTICS.exec_ok.fetch_add(1, Ordering::Relaxed);
90+
}
91+
pub fn exec_err(&self) {
92+
STATISTICS.exec_err.fetch_add(1, Ordering::Relaxed);
93+
}
94+
pub fn query(&self) {
95+
STATISTICS.query.fetch_add(1, Ordering::Relaxed);
96+
}
97+
pub fn query_ok(&self) {
98+
STATISTICS.query_ok.fetch_add(1, Ordering::Relaxed);
99+
}
100+
pub fn query_err(&self) {
101+
STATISTICS.query_err.fetch_add(1, Ordering::Relaxed);
102+
}
103+
pub fn query_into(&self) {
104+
STATISTICS.query_into.fetch_add(1, Ordering::Relaxed);
105+
}
106+
pub fn query_into_ok(&self) {
107+
STATISTICS.query_into_ok.fetch_add(1, Ordering::Relaxed);
108+
}
109+
pub fn query_into_err(&self) {
110+
STATISTICS.query_into_err.fetch_add(1, Ordering::Relaxed);
111+
}
112+
pub fn create_statement(&self) {
113+
STATISTICS.create_statement.fetch_add(1, Ordering::Relaxed);
114+
}
115+
pub fn create_statement_ok(&self) {
116+
STATISTICS
117+
.create_statement_ok
118+
.fetch_add(1, Ordering::Relaxed);
119+
}
120+
pub fn create_statement_err(&self) {
121+
STATISTICS
122+
.create_statement_err
123+
.fetch_add(1, Ordering::Relaxed);
124+
}
125+
pub fn exec_statement(&self) {
126+
STATISTICS.exec_statement.fetch_add(1, Ordering::Relaxed);
127+
}
128+
pub fn exec_statement_ok(&self) {
129+
STATISTICS.exec_statement_ok.fetch_add(1, Ordering::Relaxed);
130+
}
131+
pub fn exec_statement_err(&self) {
132+
STATISTICS
133+
.exec_statement_err
134+
.fetch_add(1, Ordering::Relaxed);
135+
}
136+
pub fn update_statement(&self) {
137+
STATISTICS.update_statement.fetch_add(1, Ordering::Relaxed);
138+
}
139+
pub fn update_statement_ok(&self) {
140+
STATISTICS
141+
.update_statement_ok
142+
.fetch_add(1, Ordering::Relaxed);
143+
}
144+
pub fn update_statement_err(&self) {
145+
STATISTICS
146+
.update_statement_err
147+
.fetch_add(1, Ordering::Relaxed);
148+
}
149+
pub fn delete_statement(&self) {
150+
STATISTICS.delete_statement.fetch_add(1, Ordering::Relaxed);
151+
}
152+
pub fn delete_statement_ok(&self) {
153+
STATISTICS
154+
.delete_statement_ok
155+
.fetch_add(1, Ordering::Relaxed);
156+
}
157+
pub fn delete_statement_err(&self) {
158+
STATISTICS
159+
.delete_statement_err
160+
.fetch_add(1, Ordering::Relaxed);
161+
}
162+
pub fn query_statement(&self) {
163+
STATISTICS.query_statement.fetch_add(1, Ordering::Relaxed);
164+
}
165+
pub fn query_statement_ok(&self) {
166+
STATISTICS
167+
.query_statement_ok
168+
.fetch_add(1, Ordering::Relaxed);
169+
}
170+
pub fn query_statement_err(&self) {
171+
STATISTICS
172+
.query_statement_err
173+
.fetch_add(1, Ordering::Relaxed);
174+
}
175+
pub fn query_statement_into(&self) {
176+
STATISTICS
177+
.query_statement_into
178+
.fetch_add(1, Ordering::Relaxed);
179+
}
180+
pub fn query_statement_into_ok(&self) {
181+
STATISTICS
182+
.query_statement_into_ok
183+
.fetch_add(1, Ordering::Relaxed);
184+
}
185+
pub fn query_statement_into_err(&self) {
186+
STATISTICS
187+
.query_statement_into_err
188+
.fetch_add(1, Ordering::Relaxed);
189+
}
190+
pub fn copy(&self) {
191+
STATISTICS.copy.fetch_add(1, Ordering::Relaxed);
192+
}
193+
pub fn copy_ok(&self) {
194+
STATISTICS.copy_ok.fetch_add(1, Ordering::Relaxed);
195+
}
196+
pub fn copy_err(&self) {
197+
STATISTICS.copy_err.fetch_add(1, Ordering::Relaxed);
198+
}
199+
}

0 commit comments

Comments
 (0)