Class: Services::Testng

Inherits:
Object
  • Object
show all
Defined in:
lib/tng/services/testng.rb

Constant Summary collapse

STATS_PATH =
"cli/tng_rails/stats"

Instance Method Summary collapse

Constructor Details

#initialize(http_client) ⇒ Testng



5
6
7
# File 'lib/tng/services/testng.rb', line 5

def initialize(http_client)
  @http_client = http_client
end

Instance Method Details

#check_system_statusObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/tng/services/testng.rb', line 9

def check_system_status
  response = @http_client.ping

  if response.is_a?(HTTPX::ErrorResponse)
    return {
      status: :error,
      message: "Unable to connect to TNG service: #{response.error&.message}",
      error_type: :connection_error
    }
  end

  case response.status
  when 200
    begin
      data = JSON.parse(response.body)
      current_version = data["current_version"]["gem_version"]
      server_base_url = data["base_url"]
      user_base_url = Tng::Services::UserAppConfig.base_url

      if current_version > Tng::VERSION
        return {
          status: :version_mismatch,
          message: "Version mismatch detected",
          current_version: current_version,
          gem_version: Tng::VERSION,
          error_type: :version_mismatch
        }
      end

      # Check for base URL mismatch
      if server_base_url && user_base_url && server_base_url != user_base_url
        return {
          status: :base_url_mismatch,
          message: "Base URL mismatch detected",
          server_base_url: server_base_url,
          user_base_url: user_base_url,
          current_version: current_version,
          gem_version: Tng::VERSION,
          error_type: :base_url_mismatch
        }
      end

      {
        status: :ok,
        message: data["message"] || "System is operational",
        current_version: current_version,
        gem_version: Tng::VERSION,
        server_base_url: server_base_url
      }
    rescue JSON::ParserError => e
      {
        status: :error,
        message: "Invalid response from server: #{e.message}",
        error_type: :parse_error
      }
    end
  else
    {
      status: :service_down,
      message: "TestNG service is currently unavailable (HTTP #{response.status})",
      error_type: :service_unavailable
    }
  end
end

#get_user_statsObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/tng/services/testng.rb', line 74

def get_user_stats
  headers = {
    "Authorization" => "Bearer #{Tng::Services::UserAppConfig.api_key}",
    "Content-Type" => "application/json",
    "User-Agent" => "Tng/#{Tng::VERSION} Ruby/#{RUBY_VERSION}"
  }

  response = @http_client.get(STATS_PATH, headers: headers)

  return if response.is_a?(HTTPX::ErrorResponse)

  if response.status == 200
    begin
      stats_data = JSON.parse(response.body)
      puts "✅ Statistics fetched successfully!"
      stats_data
    rescue JSON::ParserError => e
      puts "❌ Failed to parse statistics response: #{e.message}"
      nil
    end
  else
    puts "❌ Failed to fetch statistics (#{response.status})"
    nil
  end
end