Sha256: 6d5f5e8c024dbf558d5f401d8ca41bb3e25f588be26cedd189e4e73d991d7dae
Contents?: true
Size: 917 Bytes
Versions: 12
Compression:
Stored size: 917 Bytes
Contents
require 'socket' require 'timeout' module PulseMeter class UDPServer MAX_PACKET = 1024 def initialize(host, port) @socket = UDPSocket.new @socket.do_not_reverse_lookup = true @socket.bind(host, port) end def start(max_packets = nil) while true do if max_packets break if max_packets <= 0 max_packets -= 1 end process_packet end end private def process_packet raw_data, _ = @socket.recvfrom(MAX_PACKET) data = parse_data(raw_data) PulseMeter.redis.multi do data.each do |command| PulseMeter.redis.send(*command) end end rescue StandardError => e PulseMeter.error "Error processing packet: #{e}" end def parse_data(data) JSON.parse(data) rescue PulseMeter.error "Bad redis data: #{data.inspect}" [] end end end
Version data entries
12 entries across 12 versions & 2 rubygems