@@ -74,6 +74,10 @@ func (r *RepMgr) CurrentRole(ctx context.Context, pg *pgx.Conn) (string, error)
7474 return r .memberRole (ctx , pg , int (r .ID ))
7575}
7676
77+ func (r * RepMgr ) Standbys (ctx context.Context , pg * pgx.Conn ) ([]Standby , error ) {
78+ return r .standbyStatuses (ctx , pg , int (r .ID ))
79+ }
80+
7781func (r * RepMgr ) writeManagerConf () error {
7882 file , err := os .OpenFile (r .ConfigPath , os .O_CREATE | os .O_RDWR | os .O_TRUNC , 0644 )
7983 if err != nil {
@@ -110,7 +114,7 @@ func (r *RepMgr) writeManagerConf() error {
110114
111115func (r * RepMgr ) registerPrimary () error {
112116 cmdStr := fmt .Sprintf ("repmgr -f %s primary register -F -v" , r .ConfigPath )
113- if err := runCommand (cmdStr ); err != nil {
117+ if err := RunCommand (cmdStr ); err != nil {
114118 return err
115119 }
116120
@@ -119,7 +123,7 @@ func (r *RepMgr) registerPrimary() error {
119123
120124func (r * RepMgr ) unregisterPrimary () error {
121125 cmdStr := fmt .Sprintf ("repmgr -f %s primary unregister" , r .ConfigPath )
122- if err := runCommand (cmdStr ); err != nil {
126+ if err := RunCommand (cmdStr ); err != nil {
123127 return err
124128 }
125129
@@ -128,7 +132,7 @@ func (r *RepMgr) unregisterPrimary() error {
128132
129133func (r * RepMgr ) followPrimary () error {
130134 cmdStr := fmt .Sprintf ("repmgr -f %s standby follow" , r .ConfigPath )
131- if err := runCommand (cmdStr ); err != nil {
135+ if err := RunCommand (cmdStr ); err != nil {
132136 fmt .Printf ("failed to register standby: %s" , err )
133137 }
134138
@@ -138,7 +142,7 @@ func (r *RepMgr) followPrimary() error {
138142func (r * RepMgr ) registerStandby () error {
139143 // Force re-registry to ensure the standby picks up any new configuration changes.
140144 cmdStr := fmt .Sprintf ("repmgr -f %s standby register -F" , r .ConfigPath )
141- if err := runCommand (cmdStr ); err != nil {
145+ if err := RunCommand (cmdStr ); err != nil {
142146 fmt .Printf ("failed to register standby: %s" , err )
143147 }
144148
@@ -147,7 +151,7 @@ func (r *RepMgr) registerStandby() error {
147151
148152func (r * RepMgr ) clonePrimary (ipStr string ) error {
149153 cmdStr := fmt .Sprintf ("mkdir -p %s" , r .DataDir )
150- if err := runCommand (cmdStr ); err != nil {
154+ if err := RunCommand (cmdStr ); err != nil {
151155 return err
152156 }
153157
@@ -159,7 +163,7 @@ func (r *RepMgr) clonePrimary(ipStr string) error {
159163 r .ConfigPath )
160164
161165 fmt .Println (cmdStr )
162- return runCommand (cmdStr )
166+ return RunCommand (cmdStr )
163167}
164168
165169func (r * RepMgr ) writePasswdConf () error {
@@ -184,6 +188,29 @@ func (r *RepMgr) writePasswdConf() error {
184188 return nil
185189}
186190
191+ type Standby struct {
192+ Id int
193+ Ip string
194+ }
195+
196+ func (r * RepMgr ) standbyStatuses (ctx context.Context , pg * pgx.Conn , id int ) ([]Standby , error ) {
197+ sql := fmt .Sprintf ("select node_id, node_name from repmgr.show_nodes where type = 'standby' and upstream_node_id = '%d';" , id )
198+ var standbys []Standby
199+ rows , err := pg .Query (ctx , sql )
200+ if err != nil {
201+ return nil , err
202+ }
203+ for rows .Next () {
204+ var s Standby
205+ err := rows .Scan (& s .Id , & s .Ip )
206+ if err != nil {
207+ return nil , err
208+ }
209+ standbys = append (standbys , s )
210+ }
211+ return standbys , nil
212+ }
213+
187214func (r * RepMgr ) memberRole (ctx context.Context , pg * pgx.Conn , id int ) (string , error ) {
188215 sql := fmt .Sprintf ("select n.type from repmgr.nodes n LEFT JOIN repmgr.nodes un ON un.node_id = n.upstream_node_id WHERE n.node_id = '%d';" , id )
189216 var role string
0 commit comments