10
10
11
11
from mysqloperator .controller .shellutils import RetryLoop
12
12
from . import shellutils
13
+ from logging import Logger , getLogger
13
14
import threading
14
15
import time
15
16
import select
@@ -36,6 +37,7 @@ def __init__(self, cluster: InnoDBCluster,
36
37
self .last_view_id = None
37
38
38
39
self .handler = handler
40
+ self .logger : Logger = getLogger (f"CM_{ self .cluster .name } " )
39
41
40
42
@property
41
43
def name (self ) -> str :
@@ -48,18 +50,18 @@ def namespace(self) -> str:
48
50
def ensure_connected (self ) -> Optional ['mysqlx.Session' ]:
49
51
# TODO run a ping every X seconds
50
52
if not self .session and (not self .last_connect_attempt or time .time () - self .last_connect_attempt > k_connect_retry_interval ):
51
- print (f"GroupMonitor: Trying to connect to a member of cluster { self .cluster .namespace } /{ self .cluster .name } " )
53
+ self . logger . info (f"Trying to connect to a member of cluster { self .cluster .namespace } /{ self .cluster .name } " )
52
54
self .last_connect_attempt = time .time ()
53
55
self .session = None
54
56
self .connect_to_primary ()
55
57
56
58
# force a refresh after we connect so we don't miss anything
57
59
# that happened while we were out
58
60
if self .session :
59
- print (f"GroupMonitor: Connect member of { self .cluster .namespace } /{ self .cluster .name } OK { self .session } " )
61
+ self . logger . info (f"Connection to member of { self .cluster .namespace } /{ self .cluster .name } OK { self .session } " )
60
62
self .on_view_change (None )
61
63
else :
62
- print (f"GroupMonitor: Connect to member of { self .cluster .namespace } /{ self .cluster .name } failed " )
64
+ self . logger . error (f"Connection to member of { self .cluster .namespace } /{ self .cluster .name } FAILED " )
63
65
64
66
return self .session
65
67
@@ -68,9 +70,9 @@ def connect_to_primary(self) -> None:
68
70
session , is_primary = self .find_primary ()
69
71
if not is_primary :
70
72
if session :
71
- print (f"GroupMonitor: Could not connect to PRIMARY of cluster { self .cluster .namespace } /{ self .cluster .name } " )
73
+ self . logger . error (f"Could not connect to PRIMARY of cluster { self .cluster .namespace } /{ self .cluster .name } " )
72
74
else :
73
- print (f"GroupMonitor: Could not connect to PRIMARY nor SECONDARY of cluster { self .cluster .namespace } /{ self .cluster .name } " )
75
+ self . logger . error (f"Could not connect to neither PRIMARY nor SECONDARY of cluster { self .cluster .namespace } /{ self .cluster .name } " )
74
76
75
77
if session :
76
78
try :
@@ -127,7 +129,7 @@ def try_connect(self, pod) -> Optional['mysqlx.Session']:
127
129
try :
128
130
session = mysqlx .get_session (pod .xendpoint_co )
129
131
except mysqlsh .Error as e :
130
- print (f"GroupMonitor: Error connecting to { pod .xendpoint } : { e } " )
132
+ self . logger . error (f"ERROR CONNECTING TO { pod .xendpoint } : { e } " )
131
133
return None
132
134
133
135
return session
@@ -140,14 +142,13 @@ def handle_notice(self) -> None:
140
142
notice = self .session ._fetch_notice ()
141
143
if not notice :
142
144
break
143
- print (f"GOT NOTICE { notice } " )
145
+ self . logger . info (f"GOT NOTICE { notice } " )
144
146
self .on_view_change (notice .get ("view_id" ))
145
147
if not self .session :
146
148
break
147
149
148
150
except mysqlsh .Error as e :
149
- print (
150
- f"GroupMonitor: Error fetching notice: dest={ self .target } error={ e } " )
151
+ self .logger .error (f"ERROR FETCHING NOTICE: dest={ self .target } error={ e } " )
151
152
self .session .close ()
152
153
self .session = None
153
154
break
@@ -170,8 +171,7 @@ def on_view_change(self, view_id: Optional[str]) -> None:
170
171
171
172
# force reconnection if the PRIMARY changed or we're not connected to the PRIMARY
172
173
if self .target_not_primary or force_reconnect :
173
- print (
174
- f"GroupMonitor: PRIMARY changed for { self .cluster .namespace } /{ self .cluster .name } " )
174
+ self .logger .info (f"PRIMARY changed for { self .cluster .namespace } /{ self .cluster .name } " )
175
175
if self .session :
176
176
self .session .close ()
177
177
self .session = None
@@ -185,6 +185,8 @@ def __init__(self):
185
185
self .clusters : List [MonitoredCluster ] = []
186
186
self .stopped = False
187
187
188
+ self .logger : Logger = getLogger ("GROUP_MONITOR" )
189
+
188
190
def monitor_cluster (self , cluster : InnoDBCluster ,
189
191
handler : Callable [[InnoDBCluster , list [tuple ], bool ], None ],
190
192
logger : Logger ) -> None :
@@ -193,16 +195,17 @@ def monitor_cluster(self, cluster: InnoDBCluster,
193
195
return
194
196
195
197
# We could get called here before the Secret is ready
196
- account = RetryLoop (logger ).call (cluster .get_admin_account )
198
+ account = RetryLoop (self . logger ).call (cluster .get_admin_account )
197
199
198
200
target = MonitoredCluster (cluster , account , handler )
199
201
self .clusters .append (target )
200
- print (f"Added monitor for { cluster .namespace } /{ cluster .name } " )
202
+ self . logger . info (f"ADDED A MONITOR FOR { cluster .namespace } /{ cluster .name } " )
201
203
202
204
def remove_cluster (self , cluster : InnoDBCluster ) -> None :
203
205
for c in self .clusters :
204
206
if c .name == cluster .name and c .namespace == cluster .namespace :
205
207
self .clusters .remove (c )
208
+ self .logger .info (f"REMOVED THE MONITOR OF CLUSTER { cluster .namespace } /{ cluster .name } " )
206
209
break
207
210
208
211
def run (self ) -> None :
0 commit comments