aboutsummaryrefslogblamecommitdiff
path: root/modules/role/manifests/cryptoportfolio/bot.pp
blob: fd3ece37947cedf1c645174a84e67aec8ff25869 (plain) (tree)
1
2
3
4
5
6




                                                                 
                                                           











                                             


                                                                                                            
                              
                                    
















                                                                   
                                                










                                                                                  
                                                         


      
                                             
                           
                                                                   

                             
                                                        
      
















                                                                                                    


      

















                                                                                                                                                





























                                                                                            





                                   
                                      









                                                             
class role::cryptoportfolio::bot inherits role::cryptoportfolio {
  $password_seed = lookup("base_installation::puppet_pass_seed")

  $cf_bot_app = "${home}/bot"
  $cf_bot_app_conf = "${home}/bot_config.ini"
  $cf_bot_app_conf_hourly = "${home}/bot_config_hourly.ini"
  $cf_bot_app_reports = "${home}/bot_reports"

  ensure_packages(["python", "python-pip"])

  file { $cf_bot_app:
    ensure  => "directory",
    mode    => "0700",
    owner   => $user,
    group   => $group,
    require => User["$user:"],
  }

  archive { "${home}/trader_${trader_version}.tar.gz":
    path          => "${home}/trader_${trader_version}.tar.gz",
    source        => "https://git.immae.eu/releases/cryptoportfolio/trader/trader_${trader_version}.tar.gz",
    checksum_type => "sha256",
    checksum      => $trader_sha256,
    cleanup       => false,
    extract       => true,
    user          => $user,
    username      => lookup("base_installation::ldap_cn"),
    password      => generate_password(24, $password_seed, "ldap"),
    extract_path  => $cf_bot_app,
    require       => [User["$user:"], File[$cf_bot_app]],
  } ~>
  exec { "py-cryptoportfolio-dependencies":
    cwd         => $cf_bot_app,
    user        => $user,
    environment => ["HOME=${home}"],
    command     => "/usr/bin/make install",
    require     => User["$user:"],
    refreshonly => true,
    before      => [
      File[$cf_bot_app_conf],
      Cron::Job::Multiple["py-cryptoportfolio"],
    ]
  }

  $pg_password = generate_password(24, $password_seed, "postgres_cryptoportfolio")
  file { $cf_bot_app_conf:
    owner   => $user,
    group   => $group,
    mode    => "0600",
    content => template("role/cryptoportfolio/bot_config.ini.erb"),
    require => [
      User["$user:"],
      Archive["${home}/trader_${trader_version}.tar.gz"],
    ],
  }

  cron::job::multiple { "py-cryptoportfolio":
    ensure      => present,
    environment => ["HOME=${home}","PATH=/usr/bin/","CRON_TZ=UTC"],
    require     => [
      File[$cf_bot_app_conf],
      Archive["${home}/trader_${trader_version}.tar.gz"]
    ],
    jobs        => [
      {
        command     => "cd $cf_bot_app ; python main.py --quiet --config $cf_bot_app_conf --before",
        user        => $user,
        weekday     => 7, # Sunday
        hour        => 22,
        minute      => 30,
        description => "Run before the cryptoportfolio update",
      },
      {
        command     => "cd $cf_bot_app ; python main.py --quiet --config $cf_bot_app_conf --after",
        user        => $user,
        weekday     => 1, # Monday
        hour        => 0,
        minute      => 0,
        description => "Run after the cryptoportfolio update",
      }
    ],
  }

  if ($environment == "production") {
    $monitored_key = 3
    @profile::monitoring::local_service { "Last redis report is less than 2 hours old":
      local => {
        check_command => "check_date!redis-cli -s $redis_host GET /cryptoportfolio/$monitored_key/latest/date!2"
      }
    }

    @profile::monitoring::local_service { "Last bot report is less than one week old":
      sudos => {
        "naemon-cryptoportfolio-bot" => "naemon  ALL=($user) NOPASSWD: /usr/bin/find $cf_bot_app_reports -mindepth 1 -maxdepth 1 -printf %T@?n",
      },
      local => {
        check_command => "check_last_file_date!$cf_bot_app_reports!168!$user",
      },
    }
  }

  if versioncmp($trader_version, "v1.3") >= 0 {
    file { $cf_bot_app_conf_hourly:
      owner   => $user,
      group   => $group,
      mode    => "0600",
      content => template("role/cryptoportfolio/bot_config_hourly.ini.erb"),
      require => [
        User["$user:"],
        Archive["${home}/trader_${trader_version}.tar.gz"],
      ],
    }

    cron::job::multiple { "py-cryptoportfolio-hourly":
      ensure      => present,
      environment => ["HOME=${home}","PATH=/usr/bin/"],
      require     => [
        File[$cf_bot_app_conf_hourly],
        Archive["${home}/trader_${trader_version}.tar.gz"]
      ],
      jobs        => [
        {
          command     => "cd $cf_bot_app ; python main.py --config $cf_bot_app_conf_hourly",
          user        => $user,
          minute      => 30,
          description => "Print the current state to redis",
        },
      ],
    }
  }

  unless empty($webhook_url) {
    exec { "bot-slack-notify":
      refreshonly => true,
      environment => [
        "P_PROJECT=Trader",
        "P_WEBHOOK=${webhook_url}",
        "P_VERSION=${trader_version}",
        "P_HOST=${web_host}",
        "P_HTTPS=${web_ssl}",
      ],
      command     => "/usr/local/bin/slack-notify",
      require     => File["/usr/local/bin/slack-notify"],
      subscribe   => Exec["py-cryptoportfolio-dependencies"],
    }
  }
}