/
pitr.py
114 lines (101 loc) · 3.02 KB
/
pitr.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from datetime import datetime, timedelta
import click
from dateutil.parser import parse as parse_date
from pytz import timezone
import pgkit.application.pg as PG
from pgkit.application.db import DB
@click.group()
def pitr():
pass
@pitr.command()
@click.argument('name', required=True)
@click.argument('delay', required=True, type=int)
def backup(name, delay):
config = DB.get_config(name)
PG.backup(
config['name'],
config['host'],
config['port'],
config['version'],
config['dbname'],
config['username'],
config['password'],
config['slot'],
config['replica_port'],
config.get('use_separate_receivewal_service', False),
replica_delay=delay
)
@pitr.command()
@click.argument('name', required=True)
def status(name):
config = DB.get_config(name)
PG.print_status(
config['name'],
config['host'],
config['port'],
config['version'],
config['dbname'],
config['username'],
config['password'],
config['slot'],
config['replica_port'],
)
@pitr.command()
@click.argument('name', required=True)
@click.argument('target_time', required=True)
def recover(name, target_time):
config = DB.get_config(name)
if target_time != 'latest':
try:
parsed_target_date = parse_date(target_time)
target_time = str(timezone('Asia/Tehran').localize(parsed_target_date))
except ValueError:
return click.echo('target_time argument should have a valid datetime format.')
PG.recovery(
config['name'],
config['host'],
config['port'],
config['version'],
config['dbname'],
config['username'],
config['password'],
config['slot'],
config['replica_port'],
config.get('use_separate_receivewal_service', False),
time_to_recover=target_time
)
@pitr.command()
@click.argument('name', required=True)
def promote(name):
config = DB.get_config(name)
PG.promote(
config['name'],
config['host'],
config['port'],
config['version'],
config['dbname'],
config['username'],
config['password'],
config['slot'],
config['replica_port'],
)
# @pitr.command()
# @click.argument('name', required=True)
# @click.argument('delay', required=True, type=float)
# def status(name, delay):
# target_time = (datetime.today() - timedelta(hours=4.5)).strftime('%Y-%m-%d %H:%M:%S GMT')
# print(f'TARGET TIME: {target_time}')
# if click.confirm('Do you want to continue?'):
# time_to_recover = datetime.today() - timedelta(hours=delay)
# config = DB.get_config(name)
# PG.print_status(
# config['name'],
# config['host'],
# config['port'],
# config['version'],
# config['dbname'],
# config['username'],
# config['password'],
# config['slot'],
# config['replica_port'],
# )