1
0
mirror of https://github.com/cmur2/dyndnsd.git synced 2025-06-26 12:30:18 +02:00

gem: add solargraph support

This commit is contained in:
cn
2020-02-28 15:13:28 +01:00
parent 6d0457d70c
commit 73dbf2a5fa
14 changed files with 145 additions and 2 deletions

View File

@ -21,21 +21,32 @@ require 'dyndnsd/textfile_reporter'
require 'dyndnsd/version'
module Dyndnsd
# @return [Logger]
def self.logger
@logger
end
# @param logger [Logger]
# @return [Logger]
def self.logger=(logger)
@logger = logger
end
class LogFormatter
# @param lvl [Object]
# @param _time [DateTime]
# @param _progname [String]
# @param msg [Object]
# @return [String]
def call(lvl, _time, _progname, msg)
format("[%s] %-5s %s\n", Time.now.strftime('%Y-%m-%d %H:%M:%S'), lvl, msg.to_s)
end
end
class Daemon
# @param config [Hash{String => Object}]
# @param db [Dyndnsd::Database]
# @param updater [#update]
def initialize(config, db, updater)
@users = config['users']
@domain = config['domain']
@ -51,6 +62,9 @@ module Dyndnsd
end
end
# @param username [String]
# @param password [String]
# @return [Boolean]
def authorized?(username, password)
Helper.span('check_authorized') do |span|
span.set_tag('dyndnsd.user', username)
@ -64,6 +78,8 @@ module Dyndnsd
end
end
# @param env [Hash{String => String}]
# @return [Array{Integer,Hash{String => String},Array{String}}]
def call(env)
return [422, {'X-DynDNS-Response' => 'method_forbidden'}, []] if env['REQUEST_METHOD'] != 'GET'
return [422, {'X-DynDNS-Response' => 'not_found'}, []] if env['PATH_INFO'] != '/nic/update'
@ -71,6 +87,7 @@ module Dyndnsd
handle_dyndns_request(env)
end
# @return [void]
def self.run!
if ARGV.length != 1
puts 'Usage: dyndnsd config_file'
@ -109,6 +126,8 @@ module Dyndnsd
private
# @param params [Hash{String => String}]
# @return [Array{String}]
def extract_v4_and_v6_address(params)
return [] if !(params['myip'])
begin
@ -120,6 +139,9 @@ module Dyndnsd
end
end
# @param env [Hash{String => String}]
# @param params [Hash{String => String}]
# @return [Array{String}]
def extract_myips(env, params)
# require presence of myip parameter as valid IPAddr (v4) and valid myip6
return extract_v4_and_v6_address(params) if params.key?('myip6')
@ -134,6 +156,9 @@ module Dyndnsd
[env['REMOTE_ADDR']]
end
# @param hostnames [String]
# @param myips [Array{String}]
# @return [Array{Symbol}]
def process_changes(hostnames, myips)
changes = []
Helper.span('process_changes') do |span|
@ -158,6 +183,7 @@ module Dyndnsd
changes
end
# @return [void]
def update_db
@db['serial'] += 1
Dyndnsd.logger.info "Committing update ##{@db['serial']}"
@ -166,6 +192,8 @@ module Dyndnsd
Metriks.meter('updates.committed').mark
end
# @param env [Hash{String => String}]
# @return [Array{Integer,Hash{String => String},Array{String}}]
def handle_dyndns_request(env)
params = Rack::Utils.parse_query(env['QUERY_STRING'])
@ -204,6 +232,8 @@ module Dyndnsd
# SETUP
# @param config [Hash{String => Object}]
# @return [void]
private_class_method def self.setup_logger(config)
if config['logfile']
Dyndnsd.logger = Logger.new(config['logfile'])
@ -215,6 +245,7 @@ module Dyndnsd
Dyndnsd.logger.formatter = LogFormatter.new
end
# @return [void]
private_class_method def self.setup_traps
Signal.trap('INT') do
Dyndnsd.logger.info 'Quitting...'
@ -226,6 +257,8 @@ module Dyndnsd
end
end
# @param config [Hash{String => Object}]
# @return [void]
private_class_method def self.setup_monitoring(config)
# configure metriks
if config['graphite']
@ -253,6 +286,8 @@ module Dyndnsd
end
end
# @param config [Hash{String => Object}]
# @return [void]
private_class_method def self.setup_tracing(config)
# configure OpenTracing
if config.dig('tracing', 'jaeger')
@ -267,10 +302,12 @@ module Dyndnsd
end
end
# @param config [Hash{String => Object}]
# @return [void]
private_class_method def self.setup_rack(config)
# configure daemon
db = Database.new(config['db'])
updater = Updater::CommandWithBindZone.new(config['domain'], config['updater']['params']) if config['updater']['name'] == 'command_with_bind_zone'
updater = Updater::CommandWithBindZone.new(config['domain'], config.dig('updater', 'params')) if config.dig('updater', 'name') == 'command_with_bind_zone'
daemon = Daemon.new(config, db, updater)
# configure rack