aboutsummaryrefslogtreecommitdiffstats
path: root/hubzilla-versions.rb
diff options
context:
space:
mode:
Diffstat (limited to 'hubzilla-versions.rb')
-rwxr-xr-xhubzilla-versions.rb62
1 files changed, 62 insertions, 0 deletions
diff --git a/hubzilla-versions.rb b/hubzilla-versions.rb
new file mode 100755
index 0000000..e1977e7
--- /dev/null
+++ b/hubzilla-versions.rb
@@ -0,0 +1,62 @@
+#!/usr/bin/env ruby
+
+# SPDX-FileCopyrightText: 2022 Harald Eilertsen <haraldei@anduin.net>
+#
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+require 'erb'
+require 'json'
+require 'net/http'
+require 'time'
+require 'uri'
+
+query = <<~ENDQ
+ {
+ nodes( platform: "hubzilla" ) {
+ host,
+ version,
+ updated,
+ lastSuccess
+ }
+ }
+ENDQ
+
+graphql_uri = URI('https://the-federation.info/graphql')
+graphql_uri.query = "query=#{ERB::Util::url_encode(query)}";
+
+if ARGV.empty?
+ puts "Fetching results..."
+ result = JSON.parse(
+ Net::HTTP::get(graphql_uri, { 'Accept' => 'application/json' }))
+else
+ puts "Reading #{ARGV[0]}..."
+ result = JSON.parse(IO.read(ARGV[0]))
+end
+
+# Ignore any nodes we haven't seen in half a year
+cutoff = Time.now - (3600 * 24 * 30)
+
+nodes = result['data']['nodes']
+ .select { |node| Time::xmlschema(node['lastSuccess']) > cutoff }
+
+histogram = nodes.reduce(Hash.new) do |versions, node|
+ v = node['version']
+ versions[v] = 0 unless versions.has_key?(v)
+ versions[v] += 1
+ versions
+end
+
+total = histogram.values.sum
+
+sorted_keys = histogram.keys.sort do |a,b|
+ v1 = a.split('.').map { |n| n.to_i }
+ v2 = b.split('.').map { |n| n.to_i }
+ v2 <=> v1
+end
+
+sorted_keys.each do |k|
+ puts "%-5s: %3d (%5.2f%%)" % [k, histogram[k], (histogram[k].to_f/total.to_f) * 100]
+end
+
+puts "----------"
+puts "total: %3d" % [total]