* Add GET /api/v1/instance/peers API to reveal known domains * Add GET /api/v1/instance/activity API * Make new APIs disableable, exclude private statuses from activity stats * Fix code style issue * Fix week timestampspull/4/head
@ -0,0 +1,36 @@ | |||||
# frozen_string_literal: true | |||||
class Api::V1::Instances::ActivityController < Api::BaseController | |||||
before_action :require_enabled_api! | |||||
respond_to :json | |||||
def show | |||||
render_cached_json('api:v1:instances:activity:show', expires_in: 1.day) { activity } | |||||
end | |||||
private | |||||
def activity | |||||
weeks = [] | |||||
12.times do |i| | |||||
day = i.weeks.ago.to_date | |||||
week_id = day.cweek | |||||
week = Date.commercial(day.cwyear, week_id) | |||||
weeks << { | |||||
week: week.to_time.to_i.to_s, | |||||
statuses: Redis.current.get("activity:statuses:local:#{week_id}") || 0, | |||||
logins: Redis.current.pfcount("activity:logins:#{week_id}"), | |||||
registrations: Redis.current.get("activity:accounts:local:#{week_id}") || 0, | |||||
} | |||||
end | |||||
weeks | |||||
end | |||||
def require_enabled_api! | |||||
head 404 unless Setting.activity_api_enabled | |||||
end | |||||
end |
@ -0,0 +1,17 @@ | |||||
# frozen_string_literal: true | |||||
class Api::V1::Instances::PeersController < Api::BaseController | |||||
before_action :require_enabled_api! | |||||
respond_to :json | |||||
def index | |||||
render_cached_json('api:v1:instances:peers:index', expires_in: 1.day) { Account.remote.domains } | |||||
end | |||||
private | |||||
def require_enabled_api! | |||||
head 404 unless Setting.peers_api_enabled | |||||
end | |||||
end |
@ -0,0 +1,31 @@ | |||||
# frozen_string_literal: true | |||||
class ActivityTracker | |||||
EXPIRE_AFTER = 90.days.seconds | |||||
class << self | |||||
def increment(prefix) | |||||
key = [prefix, current_week].join(':') | |||||
redis.incrby(key, 1) | |||||
redis.expire(key, EXPIRE_AFTER) | |||||
end | |||||
def record(prefix, value) | |||||
key = [prefix, current_week].join(':') | |||||
redis.pfadd(key, value) | |||||
redis.expire(key, value) | |||||
end | |||||
private | |||||
def redis | |||||
Redis.current | |||||
end | |||||
def current_week | |||||
Time.zone.today.cweek | |||||
end | |||||
end | |||||
end |