make use of template engine, add footer
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
4fd2f099b8
commit
48d9621adf
6 changed files with 278 additions and 259 deletions
39
cmd/main.go
39
cmd/main.go
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
@ -24,20 +25,49 @@ func main() {
|
||||||
log.Fatal("There is an issue with the databse: %w", err)
|
log.Fatal("There is an issue with the databse: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var addedServers []string
|
||||||
|
for _, server := range addedServers {
|
||||||
|
println(server)
|
||||||
|
}
|
||||||
for _, s := range ss {
|
for _, s := range ss {
|
||||||
serverString := s.ServerIP
|
serverString := s.ServerIP
|
||||||
|
if !stringInSlice(s.ServerIP, addedServers) {
|
||||||
|
addedServers = append(addedServers, s.ServerIP)
|
||||||
c := cron.New()
|
c := cron.New()
|
||||||
c.AddFunc("*/1 * * * *", func() { updateServers(serverString, store) })
|
c.AddFunc("*/1 * * * *", func() { updateServers(serverString, store) })
|
||||||
c.Start()
|
c.Start()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
cronjob := cron.New()
|
||||||
|
cronjob.AddFunc("*/5 * * * *", func() {
|
||||||
|
for _, s := range ss {
|
||||||
|
serverString := s.ServerIP
|
||||||
|
if !stringInSlice(s.ServerIP, addedServers) {
|
||||||
|
addedServers = append(addedServers, s.ServerIP)
|
||||||
|
c := cron.New()
|
||||||
|
c.AddFunc("*/1 * * * *", func() { updateServers(serverString, store) })
|
||||||
|
c.Start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
cronjob.Start()
|
||||||
|
|
||||||
|
|
||||||
h := web.NewHandler(store)
|
h := web.NewHandler(store)
|
||||||
http.ListenAndServe(":3000", h)
|
http.ListenAndServe(":3000", h)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func stringInSlice(a string, list []string) bool {
|
||||||
|
for _, b := range list {
|
||||||
|
if b == a {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func updateServers(host string, store steamServer.Store) {
|
func updateServers(host string, store steamServer.Store) {
|
||||||
client, err := a2s.NewClient(host)
|
client, err := a2s.NewClient(host, a2s.TimeoutOption(time.Second * 10))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Creation of client failed: %w", err)
|
log.Fatal("Creation of client failed: %w", err)
|
||||||
|
@ -50,6 +80,13 @@ func updateServers(host string, store steamServer.Store) {
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Querying failed: %s", err)
|
log.Printf("Querying failed: %s", err)
|
||||||
|
server := steamServer.Server {
|
||||||
|
Name: host,
|
||||||
|
Map: "Server didn't reply.",
|
||||||
|
Players: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
store.UpdateServerByQuery(&server, host)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ func (s *GamemodeStore) Gamemode(name string) (steamServer.Gamemode, error) {
|
||||||
|
|
||||||
func (s *GamemodeStore) Gamemodes() ([]steamServer.Gamemode, error) {
|
func (s *GamemodeStore) Gamemodes() ([]steamServer.Gamemode, error) {
|
||||||
var gg []steamServer.Gamemode
|
var gg []steamServer.Gamemode
|
||||||
var query = `SELECT * FROM gamemodes ORDER BY name ASC`
|
var query = `SELECT * FROM public.gamemodes ORDER BY CASE name WHEN 'Deathmatch' THEN 1 WHEN 'MGE' THEN 2 WHEN 'Jumpserver' THEN 3 WHEN 'Casual' THEN 4 END`
|
||||||
if err := s.Select(&gg, query); err != nil {
|
if err := s.Select(&gg, query); err != nil {
|
||||||
return []steamServer.Gamemode{}, fmt.Errorf("error gettings servers: %w", err)
|
return []steamServer.Gamemode{}, fmt.Errorf("error gettings servers: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,63 +1,8 @@
|
||||||
<!DOCTYPE html>
|
{{define "title"}}
|
||||||
<html lang="en"><head>
|
|
||||||
<title>Serverlist :: {{.Region}}</title>
|
<title>Serverlist :: {{.Region}}</title>
|
||||||
<meta charset="utf-8">
|
{{end}}
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="https://spenny.tf/favicon.ico"/>
|
|
||||||
<link href="https://unpkg.com/tailwindcss@1.0.4/dist/tailwind.min.css" rel="stylesheet">
|
|
||||||
<script async defer data-website-id="084ca01d-5337-4f12-8932-3033addbc175" src="https://a.v0v.de/t.js"></script>
|
|
||||||
<script defer data-domain="serverlist.tf" src="https://t.v0v.de/js/t.js"></script>
|
|
||||||
<style>
|
|
||||||
tr#content {
|
|
||||||
line-height: 0;
|
|
||||||
}
|
|
||||||
td#flag {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
td#name {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="flex justify-center" style="background: #edf2f7;">
|
|
||||||
<section class="container mx-auto px-8 my-1 flex flex-wrap -m-4">
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">All Regions</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/america" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">North America</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/europe" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">Europe</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/australia" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">Australia</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/asia" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">Asia</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
{{define "content"}}
|
||||||
{{ $gamemodes := .Gamemodes}}
|
{{ $gamemodes := .Gamemodes}}
|
||||||
{{ $servers := .Servers}}
|
{{ $servers := .Servers}}
|
||||||
{{ $flags := .Flags}}
|
{{ $flags := .Flags}}
|
||||||
|
@ -121,5 +66,5 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</section>
|
||||||
</html>
|
{{end}}
|
||||||
|
|
92
templates/layout.html
Normal file
92
templates/layout.html
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en"><head>
|
||||||
|
{{block "title" .}}{{end}}
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="https://spenny.tf/favicon.ico"/>
|
||||||
|
<link href="https://unpkg.com/tailwindcss@1.0.4/dist/tailwind.min.css" rel="stylesheet">
|
||||||
|
<script async defer data-website-id="084ca01d-5337-4f12-8932-3033addbc175" src="https://a.v0v.de/t.js"></script>
|
||||||
|
<script defer data-domain="serverlist.tf" src="https://t.v0v.de/js/t.js"></script>
|
||||||
|
<style>
|
||||||
|
tr#content {
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
td#flag {
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
td#name {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body class="max-w-screen-xl px-4 py-12 mx-auto space-y-8 sm:px-6 lg:px-8" style="background: #edf2f7;">
|
||||||
|
<section class="container mx-auto px-8 my-1 flex flex-wrap -m-4">
|
||||||
|
<div class="p-2 md:w-40">
|
||||||
|
<a href="/" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
||||||
|
<div>
|
||||||
|
<p class=" text-xs font-medium ">All Regions</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="p-2 md:w-40">
|
||||||
|
<a href="/america" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
||||||
|
<div>
|
||||||
|
<p class=" text-xs font-medium ">North America</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="p-2 md:w-40">
|
||||||
|
<a href="/europe" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
||||||
|
<div>
|
||||||
|
<p class=" text-xs font-medium ">Europe</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="p-2 md:w-40">
|
||||||
|
<a href="/australia" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
||||||
|
<div>
|
||||||
|
<p class=" text-xs font-medium ">Australia</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="p-2 md:w-40">
|
||||||
|
<a href="/asia" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
||||||
|
<div>
|
||||||
|
<p class=" text-xs font-medium ">Asia</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{block "content" .}}{{end}}
|
||||||
|
</body>
|
||||||
|
<!-- Foooter -->
|
||||||
|
<section class="bg-white rounded-lg">
|
||||||
|
<div class="max-w-screen-xl px-4 py-12 mx-auto space-y-8 overflow-hidden sm:px-6 lg:px-8">
|
||||||
|
<nav class="flex flex-wrap justify-center -mx-5 -my-2">
|
||||||
|
<div class="px-5 py-2">
|
||||||
|
<a href="https://spenny.tf/discord" class="text-base leading-6 text-gray-500 hover:text-gray-900">
|
||||||
|
Get added
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="px-5 py-2">
|
||||||
|
<a href="https://spenny.tf/discord" class="text-base leading-6 text-gray-500 hover:text-gray-900">
|
||||||
|
Discord
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="px-5 py-2">
|
||||||
|
<a href="https://spenny.tf" class="text-base leading-6 text-gray-500 hover:text-gray-900">
|
||||||
|
spenny.tf
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="px-5 py-2">
|
||||||
|
<a href="https://www.teamfortress.tv/60348" class="text-base leading-6 text-gray-500 hover:text-gray-900">
|
||||||
|
teamfortress.tv
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<p class="mt-8 text-base leading-6 text-center text-gray-400">
|
||||||
|
© 2021 Serverlist.tf
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</html>
|
|
@ -1,63 +1,8 @@
|
||||||
<!DOCTYPE html>
|
{{define "title"}}
|
||||||
<html lang="en"><head>
|
|
||||||
<title>Serverlist :: {{.Region}}</title>
|
<title>Serverlist :: {{.Region}}</title>
|
||||||
<meta charset="utf-8">
|
{{end}}
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="https://spenny.tf/favicon.ico"/>
|
|
||||||
<link href="https://unpkg.com/tailwindcss@1.0.4/dist/tailwind.min.css" rel="stylesheet">
|
|
||||||
<script async defer data-website-id="084ca01d-5337-4f12-8932-3033addbc175" src="https://a.v0v.de/t.js"></script>
|
|
||||||
<script defer data-domain="serverlist.tf" src="https://t.v0v.de/js/t.js"></script>
|
|
||||||
<style>
|
|
||||||
tr#content {
|
|
||||||
line-height: 0;
|
|
||||||
}
|
|
||||||
td#flag {
|
|
||||||
padding-right: 0;
|
|
||||||
}
|
|
||||||
td#name {
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body class="flex justify-center" style="background: #edf2f7;">
|
|
||||||
<section class="container mx-auto px-8 my-1 flex flex-wrap -m-4">
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">All Regions</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/america" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">North America</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/europe" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">Europe</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/australia" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">Australia</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="p-2 md:w-40">
|
|
||||||
<a href="/asia" class="flex items-center p-4 bg-blue-200 rounded-lg shadow-xs cursor-pointer hover:bg-blue-500 hover:text-gray-100">
|
|
||||||
<div>
|
|
||||||
<p class=" text-xs font-medium ">Asia</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
{{define "content"}}
|
||||||
{{ $gamemodes := .Gamemodes}}
|
{{ $gamemodes := .Gamemodes}}
|
||||||
{{ $gamemodesCount := .GamemodeCount}}
|
{{ $gamemodesCount := .GamemodeCount}}
|
||||||
{{ $servers := .Servers}}
|
{{ $servers := .Servers}}
|
||||||
|
@ -126,5 +71,5 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</section>
|
||||||
</html>
|
{{end}}
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (h *Handler) Home() http.HandlerFunc {
|
||||||
Flags []steamServer.Flag
|
Flags []steamServer.Flag
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl := template.Must(template.ParseFiles("templates/home.html"))
|
tmpl := template.Must(template.ParseFiles("templates/layout.html", "templates/home.html"))
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
ss, err := h.store.Servers()
|
ss, err := h.store.Servers()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -77,7 +77,7 @@ func (h *Handler) Europe() http.HandlerFunc {
|
||||||
Flags []steamServer.Flag
|
Flags []steamServer.Flag
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl := template.Must(template.ParseFiles("templates/region.html"))
|
tmpl := template.Must(template.ParseFiles("templates/layout.html", "templates/region.html"))
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
reg, err := h.store.Region("Europe")
|
reg, err := h.store.Region("Europe")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -125,7 +125,7 @@ func (h *Handler) America() http.HandlerFunc {
|
||||||
Flags []steamServer.Flag
|
Flags []steamServer.Flag
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl := template.Must(template.ParseFiles("templates/region.html"))
|
tmpl := template.Must(template.ParseFiles("templates/layout.html", "templates/region.html"))
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
reg, err := h.store.Region("North America")
|
reg, err := h.store.Region("North America")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -173,7 +173,7 @@ func (h *Handler) Asia() http.HandlerFunc {
|
||||||
Flags []steamServer.Flag
|
Flags []steamServer.Flag
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl := template.Must(template.ParseFiles("templates/region.html"))
|
tmpl := template.Must(template.ParseFiles("templates/layout.html", "templates/region.html"))
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
reg, err := h.store.Region("Asia")
|
reg, err := h.store.Region("Asia")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -221,7 +221,7 @@ func (h *Handler) Australia() http.HandlerFunc {
|
||||||
Flags []steamServer.Flag
|
Flags []steamServer.Flag
|
||||||
}
|
}
|
||||||
|
|
||||||
tmpl := template.Must(template.ParseFiles("templates/region.html"))
|
tmpl := template.Must(template.ParseFiles("templates/layout.html", "templates/region.html"))
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
reg, err := h.store.Region("Australia")
|
reg, err := h.store.Region("Australia")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Reference in a new issue