Sha256: 9a9c35cb3bc4632c271138148039cdc409792063464b2a9c42a19b3710d3dc76

Contents?: true

Size: 928 Bytes

Versions: 2

Compression:

Stored size: 928 Bytes

Contents

require 'csv'

module LitmusPaper
  module Dependency
    class HaproxyBackends
      def initialize(domain_socket, cluster)
        @domain_socket = domain_socket
        @cluster = cluster
      end

      def available?
        stats = _parse_stats(_fetch_stats)

        servers = _servers_in(stats, @cluster)
        available = servers.select { |s| s['status'] == "UP" }

        available.size > 0
      end

      def _servers_in(stats, cluster)
        stats.select do |line|
          line['# pxname'] == cluster && !["FRONTEND", "BACKEND"].include?(line["svname"])
        end
      end

      def _parse_stats(csv)
        stats = CSV.parse(csv)
        headers = stats.shift
        stats.map { |stat| Hash[headers.zip(stat)] }
      end

      def _fetch_stats
        UNIXSocket.open(@domain_socket) do |socket|
          socket.send "show stat\n", 0
          socket.read
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
litmus_paper-0.3.1 lib/litmus_paper/dependency/haproxy_backends.rb
litmus_paper-0.3.0 lib/litmus_paper/dependency/haproxy_backends.rb