mentorenwahl/docker/backend/src/backend/runner.cr
Dominic Grimm 3a19d1d8db
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
Fixed file license headers
2022-03-07 14:06:02 +01:00

68 lines
2.2 KiB
Crystal

# Mentorenwahl: A fullstack application for assigning mentors to students based on their whishes.
# Copyright (C) 2022 Dominic Grimm
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
require "service"
require "log"
require "retriable"
module Backend
# Backend runner
class Runner < Service::Runner
Log = ::Log.for(self)
# Service starters
def starters : Array(Service::Starter)
[
Service::SynchronousStarter.new([
Api::Service.new.as(Service),
Worker::Service.new.as(Service),
] of Service).as(Service::Starter),
]
end
# Run the backend
def run : self
Signal::INT.trap { exit }
Signal::TERM.trap { exit }
{% if flag?(:development) %}
Log.warn { "Backend is running in development mode! Do not use this in production!" }
{% end %}
Log.info { "Checking if DB schema is up to date..." }
Retriable.retry(backoff: false, base_interval: 10.seconds, multiplier: 1.0) do
case Retriable.retry(on: DB::ConnectionRefused, backoff: false) do
Db.schema_up_to_date_compare
end
when nil
Log.fatal { "No database schema is applied. Please run `bash scripts/micrate.sh up` urgently!" }
raise Exception.new
when -1
Log.warn { "Database schema is not up to date. Please run `bash scripts/micrate.sh up`." }
when 0
Log.info { "Database schema is up to date." }
else
Log.warn { "Database schema is maybe up to date but not consistent. Please run `bash scripts/micrate.sh up` to be safe." }
end
end
Log.info { "Starting services..." }
super
end
end
end