[fix] Fixed all linters warnings
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Piotr Biernat 2021-11-15 21:41:38 +01:00
parent f2292ef8fb
commit 7bb7417f3a
10 changed files with 30 additions and 19 deletions

1
pkg/cache/cache.go vendored
View File

@ -7,6 +7,7 @@
// Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License // Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License
// Repo: https://git.pbiernat.dev/golang/vegvisir // Repo: https://git.pbiernat.dev/golang/vegvisir
// Package cache whole cache functionality
package cache package cache
import ( import (

26
pkg/cache/manager.go vendored
View File

@ -27,6 +27,7 @@ import (
"time" "time"
) )
// Manager main struct
type Manager struct { type Manager struct {
sync.RWMutex sync.RWMutex
datastore Datastore datastore Datastore
@ -46,7 +47,8 @@ type entry struct {
ready chan struct{} // closed when res is ready ready chan struct{} // closed when res is ready
} }
type HandlerFunc func(url, method string, route *RouteCache) (error, *ResponseCache) // HandlerFunc non-blocking cache handler func signature definition
type HandlerFunc func(url, method string, route *RouteCache) (*ResponseCache, error)
type queue struct { type queue struct {
items chan queueItem items chan queueItem
@ -64,9 +66,10 @@ type queueItem struct {
//var reqsSend = 0 //var reqsSend = 0
func NewCachedManager(datastore Datastore, prefix string, ttl int, handler HandlerFunc) Manager { // NewCachedManager Creates instance of non-blocking cache manager
func NewCachedManager(datastore Datastore, prefix string, ttl int, handler HandlerFunc) *Manager {
//log.Printf("Create DS: %s %d", prefix, ttl) //log.Printf("Create DS: %s %d", prefix, ttl)
m := Manager{ m := &Manager{
datastore: datastore, datastore: datastore,
prefix: prefix, prefix: prefix,
ttl: ttl, ttl: ttl,
@ -78,7 +81,8 @@ func NewCachedManager(datastore Datastore, prefix string, ttl int, handler Handl
return m return m
} }
func HttpRequestHandler(url, method string, route *RouteCache) (error, *ResponseCache) { // FIXME: Refactor|Move to handler/ // HTTPRequestHandler HTTP Handler for non-blocking cache reads
func HTTPRequestHandler(url, method string, route *RouteCache) (*ResponseCache, error) { // FIXME: Refactor|Move to handler/
//start := time.Now() //start := time.Now()
bckReq := fasthttp.AcquireRequest() bckReq := fasthttp.AcquireRequest()
bckResp := fasthttp.AcquireResponse() bckResp := fasthttp.AcquireResponse()
@ -91,7 +95,7 @@ func HttpRequestHandler(url, method string, route *RouteCache) (error, *Response
err := fasthttp.Do(bckReq, bckResp) err := fasthttp.Do(bckReq, bckResp)
if err != nil { if err != nil {
return err, nil return nil, err
} }
body, code := string(bckResp.Body()), bckResp.StatusCode() body, code := string(bckResp.Body()), bckResp.StatusCode()
@ -101,11 +105,12 @@ func HttpRequestHandler(url, method string, route *RouteCache) (error, *Response
// ^^ FIXME: rename NewResponseCache(with all depend struct) and move to handler/ (without dependencies) // ^^ FIXME: rename NewResponseCache(with all depend struct) and move to handler/ (without dependencies)
//reqsSend++ //reqsSend++
log.Println(time.Now().Nanosecond(), "HttpRequestHandler() done:", route.TargetURL, url) log.Println(time.Now().Nanosecond(), "HTTPRequestHandler() done:", route.TargetURL, url)
return nil, respCache return respCache, nil
} }
// Fetch Non-blocking cache response read
// FIXME: #68 - refactor // FIXME: #68 - refactor
func (m *Manager) Fetch(url, method string, route *RouteCache) (*ResponseCache, error) { func (m *Manager) Fetch(url, method string, route *RouteCache) (*ResponseCache, error) {
//log.Println("Response CM: Fetch()") //log.Println("Response CM: Fetch()")
@ -116,11 +121,12 @@ func (m *Manager) Fetch(url, method string, route *RouteCache) (*ResponseCache,
return res.body, res.err return res.body, res.err
} }
// Close exec while server shutting down
func (m *Manager) Close() { func (m *Manager) Close() {
close(m.queue.items) close(m.queue.items)
} }
func (m *Manager) load(url, method string, route *RouteCache/*, output interface{}*/) (bool, *entry) { // FIXME second return type( interface{} ) func (m *Manager) load(url, method string, route *RouteCache /*, output interface{}*/) (bool, *entry) { // FIXME second return type( interface{} )
//log.Println("Response CM: load()") //log.Println("Response CM: load()")
key := m.prefix + method + "_" + url key := m.prefix + method + "_" + url
@ -173,7 +179,7 @@ func (m *Manager) save(name string, r interface{}) bool { // FIXME second argume
func (m *Manager) server(handler HandlerFunc) { func (m *Manager) server(handler HandlerFunc) {
for item := range m.queue.items { for item := range m.queue.items {
m.Lock() m.Lock()
ok, e := m.load(item.url, item.method, item.route/*, &ResponseCache{}*/) // FIXME: &responseCache{} tmp fix ok, e := m.load(item.url, item.method, item.route /*, &ResponseCache{}*/) // FIXME: &responseCache{} tmp fix
m.Unlock() m.Unlock()
if !ok { if !ok {
//e = &entry{ready: make(chan struct{})/*, called: make(chan struct{})*/} //e = &entry{ready: make(chan struct{})/*, called: make(chan struct{})*/}
@ -188,7 +194,7 @@ func (m *Manager) server(handler HandlerFunc) {
func (m *Manager) call(e *entry, f HandlerFunc, url, method string, route *RouteCache) { func (m *Manager) call(e *entry, f HandlerFunc, url, method string, route *RouteCache) {
e.res.name = method + "_" + url // FIXME: hardcoded key pattern e.res.name = method + "_" + url // FIXME: hardcoded key pattern
m.RLock() m.RLock()
e.res.err, e.res.body = f(url, method, route) e.res.body, e.res.err = f(url, method, route)
m.save(e.res.name, e.res.body) m.save(e.res.name, e.res.body)
m.RUnlock() m.RUnlock()

View File

@ -23,6 +23,7 @@ type ResponseCache struct {
Headers *fasthttp.ResponseHeader Headers *fasthttp.ResponseHeader
} }
// NewResponseCache Creates new ResponseCache structure
func NewResponseCache(url, method, body string, code int, headers *fasthttp.ResponseHeader) *ResponseCache { func NewResponseCache(url, method, body string, code int, headers *fasthttp.ResponseHeader) *ResponseCache {
return &ResponseCache{url, method, body, code, headers} return &ResponseCache{url, method, body, code, headers}
} }

2
pkg/cache/route.go vendored
View File

@ -9,11 +9,13 @@
package cache package cache
// RouteCache struct corresponding route cache item
type RouteCache struct { type RouteCache struct {
SourceURL string SourceURL string
TargetURL string TargetURL string
} }
// NewRouteCache Creates new router instance
func NewRouteCache(source, target string) *RouteCache { func NewRouteCache(source, target string) *RouteCache {
return &RouteCache{ return &RouteCache{
SourceURL: source, SourceURL: source,

View File

@ -7,6 +7,7 @@
// Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License // Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License
// Repo: https://git.pbiernat.dev/golang/vegvisir // Repo: https://git.pbiernat.dev/golang/vegvisir
// Package client all available clients lives here (httpo, https, grpc etc.)
package client package client
import "github.com/valyala/fasthttp" import "github.com/valyala/fasthttp"

View File

@ -7,6 +7,7 @@
// Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License // Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License
// Repo: https://git.pbiernat.dev/golang/vegvisir // Repo: https://git.pbiernat.dev/golang/vegvisir
// Package config main config file structs
package config package config
import ( import (

View File

@ -7,4 +7,5 @@
// Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License // Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License
// Repo: https://git.pbiernat.dev/golang/vegvisir // Repo: https://git.pbiernat.dev/golang/vegvisir
// Package handler all handlers will be placed here in future...
package handler package handler

View File

@ -21,17 +21,14 @@ import (
// Router struct // Router struct
type Router struct { type Router struct {
config *config.Config config *config.Config
//cache map[string]cache.RouteCache
cache *cache.MemoryDatastore cache *cache.MemoryDatastore
//cache *cache.RedisDatastore
} }
// NewRouter function // NewRouter function
func NewRouter(config *config.Config, ds cache.Datastore, ttl int) *Router { func NewRouter(config *config.Config, ds *cache.MemoryDatastore, ttl int) *Router {
return &Router{ return &Router{
config: config, config: config,
//cache: make(map[string]cache.RouteCache), cache: ds,
cache: cache.NewMemoryDatastore(),
//cache: cache.NewRedisDatastore(config.Cache.Host, config.Cache.Password, config.Cache.Database, config.Cache.Port), //cache: cache.NewRedisDatastore(config.Cache.Host, config.Cache.Password, config.Cache.Database, config.Cache.Port),
} }
} }

View File

@ -7,6 +7,7 @@
// Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License // Copyright (c) 2021 Piotr Biernat. https://pbiernat.dev. MIT License
// Repo: https://git.pbiernat.dev/golang/vegvisir // Repo: https://git.pbiernat.dev/golang/vegvisir
// Package server contains main sever files
package server package server
import ( import (
@ -33,7 +34,7 @@ const (
type Server struct { type Server struct {
config *config.Config config *config.Config
router *Router router *Router
respCM cache.Manager respCM *cache.Manager
daemon *fasthttp.Server daemon *fasthttp.Server
} }
@ -51,7 +52,7 @@ func NewServer(cPath string) *Server {
config: cfg, config: cfg,
router: NewRouter(cfg, cache.NewMemoryDatastore(), cfg.Cache.RouteTTL), router: NewRouter(cfg, cache.NewMemoryDatastore(), cfg.Cache.RouteTTL),
// ^^ INFO: Routes always use memoryCache cause low size and fast read time (optimalization) // ^^ INFO: Routes always use memoryCache cause low size and fast read time (optimalization)
respCM: cache.NewCachedManager(*datastore, "response_", cfg.Cache.ResponseTTL, cache.HttpRequestHandler), respCM: cache.NewCachedManager(*datastore, "response_", cfg.Cache.ResponseTTL, cache.HTTPRequestHandler),
// ^^ FIXME: add handler detection option by config etc... // ^^ FIXME: add handler detection option by config etc...
} }
} }