class Adminix::Entities::Service

Attributes

device_id[R]
id[R]
jobs[R]
load_stamps[R]
logs[R]
performed_actions[R]
variables[RW]

Public Class Methods

new(opts = {}) click to toggle source
# File lib/adminix/entities/service.rb, line 9
def initialize(opts = {})
  @id = opts[:id]
  @device_id_path = "#{Helpers::Command.home}/.config/adminix/device_id"
  @variables = []
  @jobs = []
  @logs = []
  @load_stamps = []
  @send_logs = false
  @locked = false
  @send_system_load = false
  @performed_actions = {
    watcher_started: true,
    watcher_updated: false,
    process_stopped: false,
    process_started: false,
    process_updated: false
  }

  define_device_id
end

Public Instance Methods

add_logs(logs) click to toggle source
# File lib/adminix/entities/service.rb, line 57
def add_logs(logs)
  return if locked?
  @logs += logs
end
add_new_jobs(list) click to toggle source
# File lib/adminix/entities/service.rb, line 48
def add_new_jobs(list)
  list.each do |data|
    @jobs << Entities::Job.new(
      id: data['id'],
      script: data['script']
    )
  end
end
add_system_load(sys_load) click to toggle source
# File lib/adminix/entities/service.rb, line 76
def add_system_load(sys_load)
  @load_stamps << sys_load
end
add_variable(new_var) click to toggle source
# File lib/adminix/entities/service.rb, line 66
def add_variable(new_var)
  var = @variables.find { |v| v.key == new_var.key }
  if var
    index = @variables.index(var)
    @variables[index] = new_var
  else
    @variables << new_var
  end
end
allow_sending_logs() click to toggle source
# File lib/adminix/entities/service.rb, line 84
def allow_sending_logs
  @send_logs = true
  return if @logs.count.zero?
  Adminix.logger.info("Sending #{@logs.count} new logs")
end
allow_sending_system_load() click to toggle source
# File lib/adminix/entities/service.rb, line 90
def allow_sending_system_load
  @send_system_load = true
  return if @load_stamps.count.zero?
  Adminix.logger.info("Sending #{@load_stamps.count} new system load stamps")
end
bash_variables(file = nil) click to toggle source
# File lib/adminix/entities/service.rb, line 173
def bash_variables(file = nil)
  output = ''

  if file
    content = (variables.map { |v| "#{v.key}=#{v.value}" }).join("\n")
    Helpers::Files.rm(file)
    Helpers::Files.write_plain_file(file, content)
    output = file
  else
    variables.each { |v| output << "#{v.to_bash_export}\n" }
    output << "# Run this command to configure your shell:\n" \
      '# eval $(adminix env)'
  end

  output
end
clean_load_stamps() click to toggle source
# File lib/adminix/entities/service.rb, line 42
def clean_load_stamps
  return unless @send_system_load
  @send_system_load = false
  @load_stamps = []
end
clean_sent_logs() click to toggle source
# File lib/adminix/entities/service.rb, line 36
def clean_sent_logs
  return unless @send_logs
  @send_logs = false
  @logs = []
end
completed_jobs() click to toggle source
# File lib/adminix/entities/service.rb, line 149
def completed_jobs
  @jobs.select(&:completed?)
end
completed_jobs_to_api() click to toggle source
# File lib/adminix/entities/service.rb, line 153
def completed_jobs_to_api
  completed_jobs.map(&:to_api)
end
define_device_id() click to toggle source
# File lib/adminix/entities/service.rb, line 101
def define_device_id
  if Helpers::Files.file_exists?(@device_id_path)
    read_device_id
  else
    generate_device_id
  end
end
define_performed_action(key, value) click to toggle source
# File lib/adminix/entities/service.rb, line 169
def define_performed_action(key, value)
  @performed_actions[key] = value
end
ensure_credentials_exists!() click to toggle source
# File lib/adminix/entities/service.rb, line 96
def ensure_credentials_exists!
  return unless id_defined?
  Helpers::Output.display_error_and_exit('Credentials are not provided')
end
generate_device_id(id = nil) click to toggle source
# File lib/adminix/entities/service.rb, line 119
def generate_device_id(id = nil)
  @device_id = id || SecureRandom.uuid
  Helpers::Files.write_plain_file(@device_id_path, @device_id)
end
id_defined?() click to toggle source
# File lib/adminix/entities/service.rb, line 190
def id_defined?
  !(id || '').empty?
end
load_stamps_to_api() click to toggle source
# File lib/adminix/entities/service.rb, line 161
def load_stamps_to_api
  @send_system_load ? @load_stamps.map(&:to_api) : []
end
lock() click to toggle source
# File lib/adminix/entities/service.rb, line 202
def lock
  @locked = true
end
locked?() click to toggle source
# File lib/adminix/entities/service.rb, line 198
def locked?
  @locked == true
end
logs_to_api() click to toggle source
# File lib/adminix/entities/service.rb, line 157
def logs_to_api
  @send_logs ? @logs.map(&:to_api) : []
end
new_jobs() click to toggle source
# File lib/adminix/entities/service.rb, line 145
def new_jobs
  @jobs.select(&:in_queue?)
end
new_jobs?() click to toggle source
# File lib/adminix/entities/service.rb, line 194
def new_jobs?
  new_jobs.any?
end
read_device_id() click to toggle source
# File lib/adminix/entities/service.rb, line 109
def read_device_id
  content = Helpers::Files.read_plain_file(@device_id_path)
                          .split("\n").first.to_s
  if content.empty?
    Helpers::Output.display_error_and_exit("Device ID can't be empty")
  else
    @device_id = content
  end
end
remove_completed_jobs() click to toggle source
# File lib/adminix/entities/service.rb, line 30
def remove_completed_jobs
  @jobs.each do |job|
    @jobs -= [job] if job.completed?
  end
end
reset_performed_actions() click to toggle source
# File lib/adminix/entities/service.rb, line 165
def reset_performed_actions
  @performed_actions.keys.map { |key| @performed_actions[key] = false }
end
shift_load_stamps(number) click to toggle source
# File lib/adminix/entities/service.rb, line 80
def shift_load_stamps(number)
  @load_stamps.shift(number)
end
shift_logs(number) click to toggle source
# File lib/adminix/entities/service.rb, line 62
def shift_logs(number)
  @logs.shift(number)
end
sync_payload() click to toggle source

TODO: real total memory and disk

# File lib/adminix/entities/service.rb, line 125
def sync_payload
  {
    device_id: @device_id,
    watcher_started: @performed_actions[:watcher_started],
    watcher_updated: @performed_actions[:watcher_updated],
    process_stopped: @performed_actions[:process_stopped],
    process_started: @performed_actions[:process_started],
    process_updated: @performed_actions[:process_updated],
    completed_jobs: completed_jobs_to_api,
    logs: logs_to_api,
    system_load: {
      stamps: load_stamps_to_api,
      total: {
        memory: 1024,
        disk: 10_240
      }
    }
  }
end
unlock() click to toggle source
# File lib/adminix/entities/service.rb, line 206
def unlock
  @locked = false
end