Class: AtomicAdmin::V1::ApplicationInstancesController
- Inherits:
-
AdminController
- Object
- ActionController::API
- AdminController
- AtomicAdmin::V1::ApplicationInstancesController
- Includes:
- Filtering
- Defined in:
- app/controllers/atomic_admin/v1/application_instances_controller.rb
Instance Method Summary collapse
- #create ⇒ Object
- #destroy ⇒ Object
- #get_stats_for_instances(instances) ⇒ Object
- #index ⇒ Object
- #interactions ⇒ Object
- #json_for(instance) ⇒ Object
- #request_stats(instance) ⇒ Object
- #show ⇒ Object
-
#tenant_column ⇒ Object
Host apps store the tenant on an application instance in one of two ways: older schemas have a
tenantstring column, newer ones havetenant_keyplus atenantassociation. - #update ⇒ Object
Methods included from Filtering
Methods inherited from AdminController
Instance Method Details
#create ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 32 def create application = Application.find(params[:application_id]) instance = application.application_instances.new(create_params) @stats = get_stats_for_instances([instance]) if instance.save render json: { application_instance: json_for(instance) } else render json: { errors: instance.errors }, status: 422 end end |
#destroy ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 62 def destroy instance = ApplicationInstance.find(params[:id]) if destroy_instance(instance) render json: { success: true } else render json: { errors: instance.errors }, status: 422 end end |
#get_stats_for_instances(instances) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 89 def get_stats_for_instances(instances) return {} if tenant_column.nil? tenants = instances.pluck(tenant_column) stats = {} stats[:errors] = RequestStatistic.total_errors_grouped(tenants) if defined?(RequestStatistic) stats[:unique_users] = CachedUniqueUsersByContractDate.unique_users_by_contract_date(instances) if defined?(CachedUniqueUsersByContractDate) stats[:max_users_month] = CachedUniqueUsersByMonth.max_monthly_unique_users(instances) if defined?(CachedUniqueUsersByMonth) stats end |
#index ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 8 def index @application_instances = ApplicationInstance.where(application_id: params[:application_id]) @application_instances = if type == "paid" @application_instances.where.not(paid_at: nil) else @application_instances.where(paid_at: nil) end @application_instances, = filter(@application_instances) @stats = get_stats_for_instances(@application_instances) render json: { application_instances: json_for_collection(@application_instances), meta: } end |
#interactions ⇒ Object
72 73 74 75 76 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 72 def interactions instance = ApplicationInstance.find(params[:id]) interactions = AtomicAdmin.application_instance_interactions.resolve(application_instance: instance) render json: { interactions: interactions } end |
#json_for(instance) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 115 def json_for(instance) json = instance.as_json(include: [:application, :site]) json["trial_start_date"] = instance.trial_start_date&.strftime("%Y-%m-%d") if instance.respond_to?(:trial_start_date) json["trial_end_date"] = instance.trial_end_date&.strftime("%Y-%m-%d") if instance.respond_to?(:trial_end_date) json["license_start_date"] = instance.license_start_date&.strftime("%Y-%m-%d") if instance.respond_to?(:license_start_date) json["license_end_date"] = instance.license_end_date&.strftime("%Y-%m-%d") if instance.respond_to?(:license_end_date) json["paid_at"] = instance.paid_at&.strftime("%Y-%m-%d") if instance.respond_to?(:paid_at) json["is_paid"] = instance.paid_at.present? if instance.respond_to?(:paid_at) json["lti_config_xml"] = instance.lti_config_xml if instance.respond_to?(:lti_config_xml) json["request_stats"] = request_stats(instance) json end |
#request_stats(instance) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 101 def request_stats(instance) tenant = instance[tenant_column] if tenant_column { unique_users_in_contract: @stats.dig(:unique_users, tenant) || 0, # total_errors_grouped returns one tenant => count hash per window, # ordered [today, 7 days, 30 days, 365 days]. These are array indexes, # not day counts. day_1_errors: @stats.dig(:errors, 0, tenant) || 0, day_7_errors: @stats.dig(:errors, 1, tenant) || 0, max_users_month: @stats.dig(:max_users_month, tenant) || 0, } end |
#show ⇒ Object
26 27 28 29 30 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 26 def show @application_instance = ApplicationInstance.find(params[:id]) @stats = get_stats_for_instances([@application_instance]) render json: { application_instance: json_for(@application_instance) } end |
#tenant_column ⇒ Object
Host apps store the tenant on an application instance in one of two ways:
older schemas have a tenant string column, newer ones have tenant_key
plus a tenant association. Returns nil if the app has neither, in which
case we skip stats rather than raising.
82 83 84 85 86 87 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 82 def tenant_column return @tenant_column if defined?(@tenant_column) columns = ApplicationInstance.column_names @tenant_column = ["tenant", "tenant_key"].find { |column| columns.include?(column) }&.to_sym end |
#update ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/controllers/atomic_admin/v1/application_instances_controller.rb', line 44 def update instance = ApplicationInstance.find(params[:id]) instance.update(update_params) @stats = get_stats_for_instances([instance]) if params[:application_instance][:is_paid] && instance.paid_at.nil? instance.paid_at = DateTime.now elsif params[:application_instance][:is_paid] == false && instance.paid_at.present? instance.paid_at = nil end if instance.save render json: { application_instance: json_for(instance) } else render json: { errors: instance.errors }, status: 422 end end |