make use of template engine, add footer
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Philipp 2021-10-01 22:49:47 +02:00
parent 4fd2f099b8
commit 48d9621adf
6 changed files with 278 additions and 259 deletions

View file

@ -1,6 +1,7 @@
package main
import (
"time"
"log"
"net/http"
@ -24,20 +25,49 @@ func main() {
log.Fatal("There is an issue with the databse: %w", err)
}
var addedServers []string
for _, server := range addedServers {
println(server)
}
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 := 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)
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) {
client, err := a2s.NewClient(host)
client, err := a2s.NewClient(host, a2s.TimeoutOption(time.Second * 10))
if err != nil {
log.Fatal("Creation of client failed: %w", err)
@ -50,6 +80,13 @@ func updateServers(host string, store steamServer.Store) {
if err != nil {
log.Printf("Querying failed: %s", err)
server := steamServer.Server {
Name: host,
Map: "Server didn't reply.",
Players: 0,
}
store.UpdateServerByQuery(&server, host)
return
}

View file

@ -22,7 +22,7 @@ func (s *GamemodeStore) Gamemode(name string) (steamServer.Gamemode, error) {
func (s *GamemodeStore) Gamemodes() ([]steamServer.Gamemode, error) {
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 {
return []steamServer.Gamemode{}, fmt.Errorf("error gettings servers: %w", err)
}

View file

@ -1,67 +1,12 @@
<!DOCTYPE html>
<html lang="en"><head>
<title>Serverlist :: {{.Region}}</title>
<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="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 "title"}}
<title>Serverlist :: {{.Region}}</title>
{{end}}
{{ $gamemodes := .Gamemodes}}
{{ $servers := .Servers}}
{{ $flags := .Flags}}
<div class="container mx-auto px-4 sm:px-8">
{{define "content"}}
{{ $gamemodes := .Gamemodes}}
{{ $servers := .Servers}}
{{ $flags := .Flags}}
<div class="container mx-auto px-4 sm:px-8">
<div class="py-8">
<div>
<h2 class="text-2xl font-semibold leading-tight">{{.Region}}</h2>
@ -120,6 +65,6 @@
</div>
{{end}}
</div>
</div>
</body>
</html>
</div>
</section>
{{end}}

92
templates/layout.html Normal file
View 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>

View file

@ -1,68 +1,13 @@
<!DOCTYPE html>
<html lang="en"><head>
<title>Serverlist :: {{.Region}}</title>
<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="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 "title"}}
<title>Serverlist :: {{.Region}}</title>
{{end}}
{{ $gamemodes := .Gamemodes}}
{{ $gamemodesCount := .GamemodeCount}}
{{ $servers := .Servers}}
{{ $flags := .Flags}}
<div class="container mx-auto px-4 sm:px-8">
{{define "content"}}
{{ $gamemodes := .Gamemodes}}
{{ $gamemodesCount := .GamemodeCount}}
{{ $servers := .Servers}}
{{ $flags := .Flags}}
<div class="container mx-auto px-4 sm:px-8">
<div class="py-8">
<div>
<h2 class="text-2xl font-semibold leading-tight">{{.Region}}</h2>
@ -125,6 +70,6 @@
{{end}}
{{end}}
</div>
</div>
</body>
</html>
</div>
</section>
{{end}}

View file

@ -40,7 +40,7 @@ func (h *Handler) Home() http.HandlerFunc {
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) {
ss, err := h.store.Servers()
if err != nil {
@ -77,7 +77,7 @@ func (h *Handler) Europe() http.HandlerFunc {
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) {
reg, err := h.store.Region("Europe")
if err != nil {
@ -125,7 +125,7 @@ func (h *Handler) America() http.HandlerFunc {
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) {
reg, err := h.store.Region("North America")
if err != nil {
@ -173,7 +173,7 @@ func (h *Handler) Asia() http.HandlerFunc {
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) {
reg, err := h.store.Region("Asia")
if err != nil {
@ -221,7 +221,7 @@ func (h *Handler) Australia() http.HandlerFunc {
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) {
reg, err := h.store.Region("Australia")
if err != nil {