first commit
This commit is contained in:
3
app/requirements.txt
Normal file
3
app/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Flask
|
||||
prometheus-client
|
||||
requests
|
||||
56
app/script.py
Normal file
56
app/script.py
Normal file
@@ -0,0 +1,56 @@
|
||||
import requests
|
||||
from flask import Flask, request
|
||||
from prometheus_client import generate_latest, Gauge, CollectorRegistry
|
||||
import time
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Create a CollectorRegistry
|
||||
registry = CollectorRegistry()
|
||||
|
||||
# Create a Prometheus metric for the latest release
|
||||
github_latest_release_metric = Gauge(
|
||||
'github_latest_release',
|
||||
'Latest release version of a GitHub repository',
|
||||
['repo', 'version'],
|
||||
registry=registry,
|
||||
)
|
||||
|
||||
# GitHub API token (replace with your actual token)
|
||||
github_api_token = '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'
|
||||
|
||||
# Function to fetch the latest release version from GitHub
|
||||
def get_latest_release(repo_url):
|
||||
api_url = f"https://api.github.com/repos/{repo_url}/releases/latest"
|
||||
headers = {
|
||||
'Authorization': f'Bearer {github_api_token}',
|
||||
'Accept': 'application/vnd.github.v3+json'
|
||||
}
|
||||
response = requests.get(api_url, headers=headers)
|
||||
data = response.json()
|
||||
return data["tag_name"]
|
||||
|
||||
@app.route('/metrics')
|
||||
def metrics():
|
||||
# Get the GitHub repository URL from the query parameter
|
||||
repo_url = request.args.get('repo')
|
||||
if not repo_url:
|
||||
return "Error: Please provide a 'repo' parameter.", 400
|
||||
|
||||
try:
|
||||
latest_release = get_latest_release(repo_url)
|
||||
print(f"Latest release: {latest_release}")
|
||||
|
||||
# Reset the metric to its initial state
|
||||
github_latest_release_metric.clear()
|
||||
|
||||
# Set the metric value to 1 with appropriate labels
|
||||
github_latest_release_metric.labels(repo=repo_url, version=latest_release).set(1)
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
return generate_latest(registry)
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Start the web service on port 8000
|
||||
app.run(host='0.0.0.0', port=8000)
|
||||
Reference in New Issue
Block a user