X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c51634cad3c68d0a8400f1b1c47da9eef5307e06..2935de4fbccf43b7daedb9412f2ada1bf65c52ab:/services/api/app/models/node.rb diff --git a/services/api/app/models/node.rb b/services/api/app/models/node.rb index 960142e977..c791f8e255 100644 --- a/services/api/app/models/node.rb +++ b/services/api/app/models/node.rb @@ -3,9 +3,16 @@ class Node < ArvadosModel include KindAndEtag include CommonApiTemplate serialize :info, Hash + serialize :properties, Hash before_validation :ensure_ping_secret after_update :dnsmasq_update + # Only a controller can figure out whether or not the current API tokens + # have access to the associated Job. They're expected to set + # job_readable=true if the Job UUID can be included in the API response. + belongs_to(:job, foreign_key: :job_uuid, primary_key: :uuid) + attr_accessor :job_readable + MAX_SLOTS = 64 @@confdir = Rails.configuration.dnsmasq_conf_dir @@ -19,27 +26,26 @@ class Node < ArvadosModel t.add :last_ping_at t.add :slot_number t.add :status + t.add :api_job_uuid, as: :job_uuid t.add :crunch_worker_state - t.add :info + t.add :properties end api_accessible :superuser, :extend => :user do |t| t.add :first_ping_at + t.add :info t.add lambda { |x| @@nameservers }, :as => :nameservers end - def info - if current_user.andand.current_user.is_admin - super - else - super.select { |k| not k.to_s.include? "secret" } - end - end - def domain super || @@domain end + def api_job_uuid + job_readable ? job_uuid : nil + end + def crunch_worker_state + return 'down' if slot_number.nil? case self.info.andand['slurm_state'] when 'alloc', 'comp' 'busy' @@ -121,9 +127,9 @@ class Node < ArvadosModel # Record other basic stats ['total_cpu_cores', 'total_ram_mb', 'total_scratch_mb'].each do |key| if value = (o[key] or o[key.to_sym]) - self.info[key] = value + self.properties[key] = value.to_i else - self.info.delete(key) + self.properties.delete(key) end end