Compare commits
2 Commits
master
...
161b78be97
| Author | SHA1 | Date | |
|---|---|---|---|
|
161b78be97
|
|||
|
6e83384da5
|
@@ -1,86 +1,49 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
# Calculate yesterday's date in YYYY-MM-DD format
|
# Calculate yesterday's date in YYYY-MM-DD format
|
||||||
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
|
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
|
||||||
echo "Starting price tracking for $YESTERDAY" >&2
|
echo "Starting price tracking for $YESTERDAY" >&2
|
||||||
|
|
||||||
# Helper function to perform HTTP requests with retries
|
|
||||||
# Usage: make_request <retries> <method> <url> [data] [header1] [header2] ...
|
|
||||||
make_request() {
|
|
||||||
local retries=$1
|
|
||||||
local method=$2
|
|
||||||
local url=$3
|
|
||||||
local data=$4
|
|
||||||
shift 4
|
|
||||||
local headers=("$@")
|
|
||||||
|
|
||||||
local count=0
|
|
||||||
local wait_time=3
|
|
||||||
local response
|
|
||||||
|
|
||||||
while [ "$count" -lt "$retries" ]; do
|
|
||||||
local curl_opts=(-s -S -f -X "$method")
|
|
||||||
|
|
||||||
if [ -n "$data" ]; then
|
|
||||||
curl_opts+=(-d "$data")
|
|
||||||
fi
|
|
||||||
|
|
||||||
for h in "${headers[@]}"; do
|
|
||||||
curl_opts+=(-H "$h")
|
|
||||||
done
|
|
||||||
|
|
||||||
if response=$(curl "${curl_opts[@]}" "$url"); then
|
|
||||||
echo "$response"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Request to $url failed (Attempt $((count+1))/$retries). Retrying in ${wait_time}s..." >&2
|
|
||||||
sleep "$wait_time"
|
|
||||||
count=$((count + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "ERROR: Request to $url failed after $retries attempts" >&2
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fetch and process rates for a fiat currency
|
# Fetch and process rates for a fiat currency
|
||||||
get_price_data() {
|
get_price_data() {
|
||||||
local currency=$1
|
local currency=$1
|
||||||
local data avg open24 last
|
local data avg open24 last
|
||||||
|
|
||||||
if data=$(make_request 3 "GET" "https://www.bitstamp.net/api/v2/ticker/btc${currency,,}/" ""); then
|
data=$(curl -s "https://www.bitstamp.net/api/v2/ticker/btc${currency,,}/")
|
||||||
|
if [ $? -eq 0 ] && [ ! -z "$data" ]; then
|
||||||
echo "Successfully retrieved ${currency} price data" >&2
|
echo "Successfully retrieved ${currency} price data" >&2
|
||||||
open24=$(echo "$data" | jq -r '.open_24')
|
open24=$(echo "$data" | jq -r '.open_24')
|
||||||
last=$(echo "$data" | jq -r '.last')
|
last=$(echo "$data" | jq -r '.last')
|
||||||
avg=$(echo "$open24 $last" | awk '{printf "%.0f", ($1 + $2) / 2}')
|
avg=$(( (${open24%.*} + ${last%.*}) / 2 ))
|
||||||
echo $avg
|
echo $avg
|
||||||
else
|
else
|
||||||
echo "ERROR: Failed to retrieve ${currency} price data" >&2
|
echo "ERROR: Failed to retrieve ${currency} price data" >&2
|
||||||
return 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get price data for each currency
|
# Get price data for each currency
|
||||||
usd_avg=$(get_price_data "USD") || exit 1
|
usd_avg=$(get_price_data "USD")
|
||||||
eur_avg=$(get_price_data "EUR") || exit 1
|
eur_avg=$(get_price_data "EUR")
|
||||||
gbp_avg=$(get_price_data "GBP") || exit 1
|
gbp_avg=$(get_price_data "GBP")
|
||||||
|
|
||||||
# Create JSON
|
# Create JSON
|
||||||
json=$(jq -n \
|
json="{\"EUR\":$eur_avg,\"USD\":$usd_avg,\"GBP\":$gbp_avg}"
|
||||||
--argjson eur "$eur_avg" \
|
|
||||||
--argjson usd "$usd_avg" \
|
|
||||||
--argjson gbp "$gbp_avg" \
|
|
||||||
'{"EUR": $eur, "USD": $usd, "GBP": $gbp}')
|
|
||||||
echo "Rates: $json" >&2
|
echo "Rates: $json" >&2
|
||||||
|
|
||||||
# PUT in remote storage
|
# PUT in remote storage
|
||||||
if make_request 3 "PUT" "<%= @rs_base_url %>/$YESTERDAY" "$json" \
|
response=$(curl -X PUT \
|
||||||
"Authorization: Bearer $RS_AUTH" \
|
-H "Authorization: Bearer $RS_AUTH" \
|
||||||
"Content-Type: application/json" > /dev/null; then
|
-H "Content-Type: application/json" \
|
||||||
|
-d "$json" \
|
||||||
|
-w "%{http_code}" \
|
||||||
|
-s \
|
||||||
|
-o /dev/null \
|
||||||
|
"<%= @rs_base_url %>/$YESTERDAY")
|
||||||
|
|
||||||
|
if [ "$response" -eq 200 ] || [ "$response" -eq 201 ]; then
|
||||||
echo "Successfully uploaded price data" >&2
|
echo "Successfully uploaded price data" >&2
|
||||||
else
|
else
|
||||||
echo "ERROR: Failed to upload price data" >&2
|
echo "ERROR: Failed to upload price data. HTTP status: $response" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ node.default["gitea"]["working_directory"] = "/var/lib/gitea"
|
|||||||
node.default["gitea"]["port"] = 3000
|
node.default["gitea"]["port"] = 3000
|
||||||
node.default["gitea"]["postgresql_host"] = "localhost:5432"
|
node.default["gitea"]["postgresql_host"] = "localhost:5432"
|
||||||
node.default["gitea"]["domain"] = "gitea.kosmos.org"
|
node.default["gitea"]["domain"] = "gitea.kosmos.org"
|
||||||
|
node.default["gitea"]["email"] = "gitea@kosmos.org"
|
||||||
|
|
||||||
node.default["gitea"]["config"] = {
|
node.default["gitea"]["config"] = {
|
||||||
"log": {
|
"log": {
|
||||||
|
|||||||
@@ -19,6 +19,17 @@ jwt_secret = gitea_data_bag_item["jwt_secret"]
|
|||||||
internal_token = gitea_data_bag_item["internal_token"]
|
internal_token = gitea_data_bag_item["internal_token"]
|
||||||
secret_key = gitea_data_bag_item["secret_key"]
|
secret_key = gitea_data_bag_item["secret_key"]
|
||||||
|
|
||||||
|
apt_repository "git-core-ppa" do
|
||||||
|
uri "http://ppa.launchpad.net/git-core/ppa/ubuntu"
|
||||||
|
components ["main"]
|
||||||
|
key "E1DF1F24"
|
||||||
|
action :add
|
||||||
|
only_if do
|
||||||
|
node['platform'] == 'ubuntu' &&
|
||||||
|
Gem::Version.new(node['platform_version']) < Gem::Version.new('22.04')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
package "git"
|
package "git"
|
||||||
|
|
||||||
user "git" do
|
user "git" do
|
||||||
@@ -26,6 +37,13 @@ user "git" do
|
|||||||
home "/home/git"
|
home "/home/git"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
directory "/home/git/.ssh" do
|
||||||
|
owner "git"
|
||||||
|
group "git"
|
||||||
|
mode "0700"
|
||||||
|
recursive true
|
||||||
|
end
|
||||||
|
|
||||||
directory working_directory do
|
directory working_directory do
|
||||||
owner "git"
|
owner "git"
|
||||||
group "git"
|
group "git"
|
||||||
@@ -78,6 +96,8 @@ if node.chef_environment == "production"
|
|||||||
end
|
end
|
||||||
|
|
||||||
config_variables = {
|
config_variables = {
|
||||||
|
domain: node["gitea"]["domain"],
|
||||||
|
email: node["gitea"]["email"],
|
||||||
working_directory: working_directory,
|
working_directory: working_directory,
|
||||||
git_home_directory: git_home_directory,
|
git_home_directory: git_home_directory,
|
||||||
repository_root_directory: repository_root_directory,
|
repository_root_directory: repository_root_directory,
|
||||||
@@ -98,6 +118,16 @@ config_variables = {
|
|||||||
s3_bucket: gitea_data_bag_item["s3_bucket"]
|
s3_bucket: gitea_data_bag_item["s3_bucket"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bash "Generate git ed25519 keypair" do
|
||||||
|
user "git"
|
||||||
|
group "git"
|
||||||
|
cwd git_home_directory
|
||||||
|
code <<-EOH
|
||||||
|
ssh-keygen -t ed25519 -f #{git_home_directory}/.ssh/id_ed25519
|
||||||
|
EOH
|
||||||
|
creates "#{git_home_directory}/.ssh/id_ed25519"
|
||||||
|
end
|
||||||
|
|
||||||
template "#{config_directory}/app.ini" do
|
template "#{config_directory}/app.ini" do
|
||||||
source "app.ini.erb"
|
source "app.ini.erb"
|
||||||
owner "git"
|
owner "git"
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ APP_NAME = Gitea
|
|||||||
RUN_MODE = prod
|
RUN_MODE = prod
|
||||||
|
|
||||||
[server]
|
[server]
|
||||||
SSH_DOMAIN = gitea.kosmos.org
|
SSH_DOMAIN = <%= @domain %>
|
||||||
HTTP_PORT = 3000
|
HTTP_PORT = 3000
|
||||||
DISABLE_SSH = false
|
DISABLE_SSH = false
|
||||||
SSH_PORT = 22
|
SSH_PORT = 22
|
||||||
PROTOCOL = http
|
PROTOCOL = http
|
||||||
DOMAIN = gitea.kosmos.org
|
DOMAIN = <%= @domain %>
|
||||||
# Gitea is running behind an nginx reverse load balancer, use an HTTPS root URL
|
# Gitea is running behind an nginx reverse load balancer, use an HTTPS root URL
|
||||||
ROOT_URL = https://%(DOMAIN)s
|
ROOT_URL = https://%(DOMAIN)s
|
||||||
# REDIRECT_OTHER_PORT = true
|
# REDIRECT_OTHER_PORT = true
|
||||||
@@ -30,6 +30,16 @@ MAX_OPEN_CONNS = 20
|
|||||||
ROOT = <%= @repository_root_directory %>
|
ROOT = <%= @repository_root_directory %>
|
||||||
DISABLE_DOWNLOAD_SOURCE_ARCHIVES = true
|
DISABLE_DOWNLOAD_SOURCE_ARCHIVES = true
|
||||||
|
|
||||||
|
[repository.signing]
|
||||||
|
SIGNING_KEY = <%= @git_home_directory %>/.ssh/id_ed25519.pub
|
||||||
|
SIGNING_NAME = Gitea
|
||||||
|
SIGNING_EMAIL = git@<%= @domain %>
|
||||||
|
SIGNING_FORMAT = ssh
|
||||||
|
INITIAL_COMMIT = always
|
||||||
|
CRUD_ACTIONS = always
|
||||||
|
WIKI = always
|
||||||
|
MERGES = always
|
||||||
|
|
||||||
# [indexer]
|
# [indexer]
|
||||||
# ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve
|
# ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve
|
||||||
|
|
||||||
@@ -46,7 +56,7 @@ SMTP_ADDR = <%= @smtp_addr %>
|
|||||||
SMTP_PORT = <%= @smtp_port %>
|
SMTP_PORT = <%= @smtp_port %>
|
||||||
USER = <%= @smtp_user %>
|
USER = <%= @smtp_user %>
|
||||||
PASSWD = <%= @smtp_password %>
|
PASSWD = <%= @smtp_password %>
|
||||||
FROM = gitea@kosmos.org
|
FROM = <%= @email %>
|
||||||
|
|
||||||
[security]
|
[security]
|
||||||
INTERNAL_TOKEN = <%= @internal_token %>
|
INTERNAL_TOKEN = <%= @internal_token %>
|
||||||
|
|||||||
Reference in New Issue
Block a user