Skip to content

Commit

Permalink
Refactor fetch_downloads method to use GraphQL API for package statis…
Browse files Browse the repository at this point in the history
…tics
  • Loading branch information
andrew committed Jan 20, 2025
1 parent 56e984b commit 1ea16b2
Showing 1 changed file with 31 additions and 4 deletions.
35 changes: 31 additions & 4 deletions app/models/ecosystem/julia.rb
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,44 @@ def map_package_metadata(package)
repository_url: repo_fallback(json['url'], json['homepage']),
keywords_array: json['tags'],
licenses: json['license'],
downloads: fetch_downloads(package),
downloads: fetch_downloads(package['name']),
downloads_period: 'total',
metadata: {
uuid: json['uuid']
}
}
end

def fetch_downloads(package)
j = get_json("https://pkgs.genieframework.com/api/v1/badge/#{package['name']}")
j['message'].to_i
def fetch_downloads(package_name)
url = "https://juliahub.com/v1/graphql"
query = {
operationName: "PackageStats",
variables: { name: package_name },
query: <<~GRAPHQL
query PackageStats($name: String!) {
packageStats: packagestats(where: {package: {name: {_eq: $name}}}) {
downloads
users
uuid
package {
name
}
}
}
GRAPHQL
}

response = Faraday.post(url) do |req|
req.headers['Content-Type'] = 'application/json'
req.headers['Accept'] = '*/*'
req.headers['x-hasura-role'] = 'anonymous'
req.headers['x-juliahub-ensure-js'] = 'true'
req.body = query.to_json
end

json = JSON.parse(response.body) rescue {}

json.dig('data', 'packageStats')&.first&.fetch('users', nil)
rescue
nil
end
Expand Down

0 comments on commit 1ea16b2

Please sign in to comment.