]>
Commit | Line | Data |
---|---|---|
39e05b4e IB |
1 | class role::cryptoportfolio::bot inherits role::cryptoportfolio { |
2 | $password_seed = lookup("base_installation::puppet_pass_seed") | |
3 | ||
4 | $cf_bot_app = "${home}/bot" | |
5 | $cf_bot_app_conf = "${home}/bot_config.ini" | |
d5f4e591 | 6 | $cf_bot_app_conf_hourly = "${home}/bot_config_hourly.ini" |
39e05b4e IB |
7 | $cf_bot_app_reports = "${home}/bot_reports" |
8 | ||
9 | ensure_packages(["python", "python-pip"]) | |
10 | ||
11 | file { $cf_bot_app: | |
12 | ensure => "directory", | |
13 | mode => "0700", | |
14 | owner => $user, | |
15 | group => $group, | |
16 | require => User["$user:"], | |
17 | } | |
18 | ||
acaa9ea9 IB |
19 | archive { "${home}/trader_${trader_version}.tar.gz": |
20 | path => "${home}/trader_${trader_version}.tar.gz", | |
19c467dc | 21 | source => "https://release.immae.eu/cryptoportfolio/trader/trader_${trader_version}.tar.gz", |
39e05b4e | 22 | checksum_type => "sha256", |
acaa9ea9 | 23 | checksum => $trader_sha256, |
39e05b4e IB |
24 | cleanup => false, |
25 | extract => true, | |
26 | user => $user, | |
27 | username => lookup("base_installation::ldap_cn"), | |
28 | password => generate_password(24, $password_seed, "ldap"), | |
29 | extract_path => $cf_bot_app, | |
30 | require => [User["$user:"], File[$cf_bot_app]], | |
31 | } ~> | |
32 | exec { "py-cryptoportfolio-dependencies": | |
33 | cwd => $cf_bot_app, | |
34 | user => $user, | |
35 | environment => ["HOME=${home}"], | |
36 | command => "/usr/bin/make install", | |
37 | require => User["$user:"], | |
38 | refreshonly => true, | |
39 | before => [ | |
40 | File[$cf_bot_app_conf], | |
2859008e | 41 | Cron::Job::Multiple["py-cryptoportfolio"], |
39e05b4e IB |
42 | ] |
43 | } | |
44 | ||
45 | $pg_password = generate_password(24, $password_seed, "postgres_cryptoportfolio") | |
46 | file { $cf_bot_app_conf: | |
47 | owner => $user, | |
48 | group => $group, | |
49 | mode => "0600", | |
50 | content => template("role/cryptoportfolio/bot_config.ini.erb"), | |
51 | require => [ | |
52 | User["$user:"], | |
acaa9ea9 | 53 | Archive["${home}/trader_${trader_version}.tar.gz"], |
39e05b4e IB |
54 | ], |
55 | } | |
56 | ||
2859008e | 57 | cron::job::multiple { "py-cryptoportfolio": |
39e05b4e | 58 | ensure => present, |
7f1244c8 | 59 | environment => ["HOME=${home}","PATH=/usr/bin/","CRON_TZ=UTC"], |
39e05b4e IB |
60 | require => [ |
61 | File[$cf_bot_app_conf], | |
acaa9ea9 | 62 | Archive["${home}/trader_${trader_version}.tar.gz"] |
39e05b4e | 63 | ], |
b08f274f | 64 | jobs => [], |
39e05b4e IB |
65 | } |
66 | ||
96f8d0f0 IB |
67 | if ($environment == "production") { |
68 | $monitored_key = 3 | |
69 | @profile::monitoring::local_service { "Last redis report is less than 2 hours old": | |
70 | local => { | |
71 | check_command => "check_date!redis-cli -s $redis_host GET /cryptoportfolio/$monitored_key/latest/date!2" | |
72 | } | |
73 | } | |
74 | ||
75 | @profile::monitoring::local_service { "Last bot report is less than one week old": | |
76 | sudos => { | |
77 | "naemon-cryptoportfolio-bot" => "naemon ALL=($user) NOPASSWD: /usr/bin/find $cf_bot_app_reports -mindepth 1 -maxdepth 1 -printf %T@?n", | |
78 | }, | |
79 | local => { | |
80 | check_command => "check_last_file_date!$cf_bot_app_reports!168!$user", | |
81 | }, | |
82 | } | |
83 | } | |
84 | ||
d5f4e591 IB |
85 | if versioncmp($trader_version, "v1.3") >= 0 { |
86 | file { $cf_bot_app_conf_hourly: | |
87 | owner => $user, | |
88 | group => $group, | |
89 | mode => "0600", | |
90 | content => template("role/cryptoportfolio/bot_config_hourly.ini.erb"), | |
91 | require => [ | |
92 | User["$user:"], | |
93 | Archive["${home}/trader_${trader_version}.tar.gz"], | |
94 | ], | |
95 | } | |
96 | ||
97 | cron::job::multiple { "py-cryptoportfolio-hourly": | |
98 | ensure => present, | |
99 | environment => ["HOME=${home}","PATH=/usr/bin/"], | |
100 | require => [ | |
101 | File[$cf_bot_app_conf_hourly], | |
102 | Archive["${home}/trader_${trader_version}.tar.gz"] | |
103 | ], | |
104 | jobs => [ | |
105 | { | |
106 | command => "cd $cf_bot_app ; python main.py --config $cf_bot_app_conf_hourly", | |
107 | user => $user, | |
108 | minute => 30, | |
109 | description => "Print the current state to redis", | |
110 | }, | |
111 | ], | |
112 | } | |
113 | } | |
114 | ||
39e05b4e IB |
115 | unless empty($webhook_url) { |
116 | exec { "bot-slack-notify": | |
117 | refreshonly => true, | |
118 | environment => [ | |
119 | "P_PROJECT=Trader", | |
120 | "P_WEBHOOK=${webhook_url}", | |
acaa9ea9 | 121 | "P_VERSION=${trader_version}", |
39e05b4e IB |
122 | "P_HOST=${web_host}", |
123 | "P_HTTPS=${web_ssl}", | |
124 | ], | |
125 | command => "/usr/local/bin/slack-notify", | |
126 | require => File["/usr/local/bin/slack-notify"], | |
127 | subscribe => Exec["py-cryptoportfolio-dependencies"], | |
128 | } | |
129 | } | |
130 | } | |
131 |