]>
Commit | Line | Data |
---|---|---|
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" | |
6 | $cf_bot_app_conf_hourly = "${home}/bot_config_hourly.ini" | |
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 | ||
19 | archive { "${home}/trader_${trader_version}.tar.gz": | |
20 | path => "${home}/trader_${trader_version}.tar.gz", | |
21 | source => "https://release.immae.eu/cryptoportfolio/trader/trader_${trader_version}.tar.gz", | |
22 | checksum_type => "sha256", | |
23 | checksum => $trader_sha256, | |
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], | |
41 | Cron::Job::Multiple["py-cryptoportfolio"], | |
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:"], | |
53 | Archive["${home}/trader_${trader_version}.tar.gz"], | |
54 | ], | |
55 | } | |
56 | ||
57 | cron::job::multiple { "py-cryptoportfolio": | |
58 | ensure => present, | |
59 | environment => ["HOME=${home}","PATH=/usr/bin/","CRON_TZ=UTC"], | |
60 | require => [ | |
61 | File[$cf_bot_app_conf], | |
62 | Archive["${home}/trader_${trader_version}.tar.gz"] | |
63 | ], | |
64 | jobs => [], | |
65 | } | |
66 | ||
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 | ||
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 | ||
115 | unless empty($webhook_url) { | |
116 | exec { "bot-slack-notify": | |
117 | refreshonly => true, | |
118 | environment => [ | |
119 | "P_PROJECT=Trader", | |
120 | "P_WEBHOOK=${webhook_url}", | |
121 | "P_VERSION=${trader_version}", | |
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 |