init db in binary, and configure units and interval
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
OPENWEATHER_API_KEY=1234567890
|
OPENWEATHER_API_KEY=1234567890
|
||||||
OPENWEATHER_LAT=34.052235
|
OPENWEATHER_LAT=34.052235
|
||||||
OPENWEATHER_LON=-118.243683
|
OPENWEATHER_LON=-118.243683
|
||||||
|
OPENWEATHER_UPDATE_INTERVAL=15
|
||||||
PASSPORT_ADMIN_USERNAME=admin
|
PASSPORT_ADMIN_USERNAME=admin
|
||||||
PASSPORT_ADMIN_PASSWORD=P@ssw0rd
|
PASSPORT_ADMIN_PASSWORD=P@ssw0rd
|
||||||
PASSPORT_SEARCH_PROVIDER=https://google.com/search?q=%s
|
PASSPORT_SEARCH_PROVIDER=https://google.com/search?q=%s
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
49
main.go
49
main.go
@@ -19,6 +19,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -34,11 +35,8 @@ import (
|
|||||||
"github.com/nfnt/resize"
|
"github.com/nfnt/resize"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed views/**
|
//go:embed assets/** views/** schema.sql
|
||||||
var viewsFS embed.FS
|
var embeddedAssets embed.FS
|
||||||
|
|
||||||
//go:embed assets/**
|
|
||||||
var assetsFS embed.FS
|
|
||||||
|
|
||||||
var devContent string = `<script>
|
var devContent string = `<script>
|
||||||
let host = window.location.hostname;
|
let host = window.location.hostname;
|
||||||
@@ -89,6 +87,13 @@ func NewApp(dbPath string) (*App, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
schema, err := embeddedAssets.ReadFile("schema.sql")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = db.Exec(string(schema))
|
||||||
|
|
||||||
return &App{
|
return &App{
|
||||||
db: db,
|
db: db,
|
||||||
WeatherCache: NewWeatherCache(),
|
WeatherCache: NewWeatherCache(),
|
||||||
@@ -168,15 +173,29 @@ type WeatherCache struct {
|
|||||||
lastUpdate time.Time
|
lastUpdate time.Time
|
||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
updateChan chan struct{}
|
updateChan chan struct{}
|
||||||
|
tempUnits string
|
||||||
|
updateInterval int
|
||||||
apiKey string
|
apiKey string
|
||||||
lat string
|
lat string
|
||||||
lon string
|
lon string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWeatherCache() *WeatherCache {
|
func NewWeatherCache() *WeatherCache {
|
||||||
|
updateInterval, err := strconv.Atoi(os.Getenv("OPENWEATHER_UPDATE_INTERVAL"))
|
||||||
|
if err != nil || updateInterval < 1 {
|
||||||
|
updateInterval = 15
|
||||||
|
}
|
||||||
|
|
||||||
|
units := os.Getenv("OPENWEATHER_TEMP_UNITS")
|
||||||
|
if units == "" {
|
||||||
|
units = "metric"
|
||||||
|
}
|
||||||
|
|
||||||
cache := &WeatherCache{
|
cache := &WeatherCache{
|
||||||
data: &WeatherData{},
|
data: &WeatherData{},
|
||||||
updateChan: make(chan struct{}),
|
updateChan: make(chan struct{}),
|
||||||
|
tempUnits: units,
|
||||||
|
updateInterval: updateInterval,
|
||||||
apiKey: os.Getenv("OPENWEATHER_API_KEY"),
|
apiKey: os.Getenv("OPENWEATHER_API_KEY"),
|
||||||
lat: os.Getenv("OPENWEATHER_LAT"),
|
lat: os.Getenv("OPENWEATHER_LAT"),
|
||||||
lon: os.Getenv("OPENWEATHER_LON"),
|
lon: os.Getenv("OPENWEATHER_LON"),
|
||||||
@@ -196,7 +215,7 @@ func (c *WeatherCache) GetWeather() WeatherData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *WeatherCache) weatherWorker() {
|
func (c *WeatherCache) weatherWorker() {
|
||||||
ticker := time.NewTicker(30 * time.Minute)
|
ticker := time.NewTicker(time.Duration(c.updateInterval) * time.Minute)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@@ -210,8 +229,8 @@ func (c *WeatherCache) weatherWorker() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *WeatherCache) updateWeather() {
|
func (c *WeatherCache) updateWeather() {
|
||||||
url := fmt.Sprintf("https://api.openweathermap.org/data/2.5/weather?lat=%s&lon=%s&appid=%s&units=metric",
|
url := fmt.Sprintf("https://api.openweathermap.org/data/2.5/weather?lat=%s&lon=%s&appid=%s&units=%s",
|
||||||
c.lat, c.lon, c.apiKey)
|
c.lat, c.lon, c.apiKey, c.tempUnits)
|
||||||
|
|
||||||
resp, err := http.Get(url)
|
resp, err := http.Get(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -489,12 +508,17 @@ func main() {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
viewsDir, err := fs.Sub(viewsFS, "views")
|
viewsDir, err := fs.Sub(embeddedAssets, "views")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
css, err := fs.ReadFile(assetsFS, "assets/tailwind.css")
|
assetsDir, err := fs.Sub(embeddedAssets, "assets")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
css, err := fs.ReadFile(embeddedAssets, "assets/tailwind.css")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@@ -518,11 +542,6 @@ func main() {
|
|||||||
MaxAge: 31536000,
|
MaxAge: 31536000,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
assetsDir, err := fs.Sub(assetsFS, "assets")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
router.Use("/assets", static.New("", static.Config{
|
router.Use("/assets", static.New("", static.Config{
|
||||||
FS: assetsDir,
|
FS: assetsDir,
|
||||||
MaxAge: 31536000,
|
MaxAge: 31536000,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
CREATE TABLE categories (
|
CREATE TABLE IF NOT EXISTS categories (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
icon TEXT NOT NULL
|
icon TEXT NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE links (
|
CREATE TABLE IF NOT EXISTS links (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
category_id INTEGER NOT NULL,
|
category_id INTEGER NOT NULL,
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
@@ -13,7 +13,7 @@ CREATE TABLE links (
|
|||||||
url TEXT NOT NULL
|
url TEXT NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE sessions (
|
CREATE TABLE IF NOT EXISTS sessions (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
session_id TEXT NOT NULL,
|
session_id TEXT NOT NULL,
|
||||||
expires_at TEXT NOT NULL
|
expires_at TEXT NOT NULL
|
||||||
|
|||||||
Reference in New Issue
Block a user