Added geo calendar support.

This commit is contained in:
Martin Edenhofer 2015-09-22 16:49:57 +02:00
parent de7039b2b5
commit 56288aba42
2 changed files with 111 additions and 0 deletions

View file

@ -0,0 +1,67 @@
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
module Service
class GeoCalendar
include ApplicationLib
=begin
lookup calendar based on ip or hostname
result = Service::GeoCalendar.location( '99.99.99.99' )
lookup calendar based on own system ip
result = Service::GeoCalendar.location
returns
result = {
"name" => 'Country Name',
"timezone" => 'time zone of ip',
"business_hours" => {
"mon" => {
"active" => true,
"timeframes" => [["09:00","17:00"]]
},
"tue" => {
"active" => true,
"timeframes" => [["09:00","17:00"]]
},
"wed":{
"active" => true,
"timeframes" => [["09:00","17:00"]]
},
"thu":{
"active" => true,
"timeframes" => [["09:00","17:00"]]
},
"fri":{
"active" => true,
"timeframes" => [["09:00","17:00"]]
},
"sat":{
"active" => false,
"timeframes" => [["09:00","17:00"]]
},
"sun":{
"active" => false,
"timeframes" => [["09:00","17:00"]]
}
},
"ical_url" => "",
}
=end
def self.location(address = nil)
# load backend
backend = load_adapter_by_setting( 'geo_calendar_backend' )
return if !backend
# db lookup
backend.location(address)
end
end
end

View file

@ -0,0 +1,44 @@
# Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
require 'cache'
class Service::GeoCalendar::Zammad
def self.location(address)
# check cache
cache_key = "zammadgeocalendar::#{address}"
cache = Cache.get( cache_key )
return cache if cache
# do lookup
host = 'https://geo.zammad.com'
if address
url = "/calendar?ip=#{CGI.escape address}"
else
url = '/calendar'
end
data = {}
begin
response = UserAgent.get(
"#{host}#{url}",
{},
{
json: true,
open_timeout: 2,
read_timeout: 4,
},
)
if !response.success? && response.code.to_s !~ /^40.$/
fail "ERROR: #{response.code}/#{response.body}"
end
data = response.data
Cache.write( cache_key, data, { expires_in: 1.day } )
rescue => e
Rails.logger.error "#{host}#{url}: #{e.inspect}"
Cache.write( cache_key, data, { expires_in: 1.minutes } )
end
data
end
end