mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 04:57:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
class ChatwootHub
 | 
						|
  BASE_URL = ENV['CHATWOOT_HUB_URL'] || 'https://hub.2.chatwoot.com'
 | 
						|
  PING_URL = "#{BASE_URL}/ping".freeze
 | 
						|
  REGISTRATION_URL = "#{BASE_URL}/instances".freeze
 | 
						|
  EVENTS_URL = "#{BASE_URL}/events".freeze
 | 
						|
 | 
						|
  def self.installation_identifier
 | 
						|
    identifier = InstallationConfig.find_by(name: 'INSTALLATION_IDENTIFIER')&.value
 | 
						|
    identifier ||= InstallationConfig.create(name: 'INSTALLATION_IDENTIFIER', value: SecureRandom.uuid).value
 | 
						|
    identifier
 | 
						|
  end
 | 
						|
 | 
						|
  def self.instance_config
 | 
						|
    {
 | 
						|
      installation_identifier: installation_identifier,
 | 
						|
      installation_version: Chatwoot.config[:version],
 | 
						|
      installation_host: URI.parse(ENV.fetch('FRONTEND_URL', '')).host
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  def self.instance_metrics
 | 
						|
    {
 | 
						|
      accounts_count: Account.count,
 | 
						|
      users_count: User.count,
 | 
						|
      inboxes_count: Inbox.count,
 | 
						|
      conversations_count: Conversation.count,
 | 
						|
      incoming_messages_count: Message.incoming.count,
 | 
						|
      outgoing_messages_count: Message.outgoing.count,
 | 
						|
      additional_information: {}
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  def self.latest_version
 | 
						|
    begin
 | 
						|
      info = instance_config
 | 
						|
      info = info.merge(instance_metrics) unless ENV['DISABLE_TELEMETRY']
 | 
						|
      response = RestClient.post(PING_URL, info.to_json, { content_type: :json, accept: :json })
 | 
						|
      version = JSON.parse(response)['version']
 | 
						|
    rescue *ExceptionList::REST_CLIENT_EXCEPTIONS, *ExceptionList::URI_EXCEPTIONS => e
 | 
						|
      Rails.logger.info "Exception: #{e.message}"
 | 
						|
    rescue StandardError => e
 | 
						|
      Raven.capture_exception(e)
 | 
						|
    end
 | 
						|
    version
 | 
						|
  end
 | 
						|
 | 
						|
  def self.register_instance(company_name, owner_name, owner_email)
 | 
						|
    info = { company_name: company_name, owner_name: owner_name, owner_email: owner_email, subscribed_to_mailers: true }
 | 
						|
    RestClient.post(REGISTRATION_URL, info.merge(instance_config).to_json, { content_type: :json, accept: :json })
 | 
						|
  rescue *ExceptionList::REST_CLIENT_EXCEPTIONS, *ExceptionList::URI_EXCEPTIONS => e
 | 
						|
    Rails.logger.info "Exception: #{e.message}"
 | 
						|
  rescue StandardError => e
 | 
						|
    Raven.capture_exception(e)
 | 
						|
  end
 | 
						|
 | 
						|
  def self.emit_event(event_name, event_data)
 | 
						|
    return if ENV['DISABLE_TELEMETRY']
 | 
						|
 | 
						|
    info = { event_name: event_name, event_data: event_data }
 | 
						|
    RestClient.post(EVENTS_URL, info.merge(instance_config).to_json, { content_type: :json, accept: :json })
 | 
						|
  rescue *ExceptionList::REST_CLIENT_EXCEPTIONS, *ExceptionList::URI_EXCEPTIONS => e
 | 
						|
    Rails.logger.info "Exception: #{e.message}"
 | 
						|
  rescue StandardError => e
 | 
						|
    Raven.capture_exception(e)
 | 
						|
  end
 | 
						|
end
 |