From 239b05206ad02c3a40574da0bff74fc13d1fc3bf Mon Sep 17 00:00:00 2001 From: Andrey Ivanov Date: Fri, 23 Oct 2020 14:18:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BA=D0=B5=D0=BB=D0=B5=D1=82=20=D0=B3?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2.=20=D0=9C=D0=BE=D0=B6=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C=20=D0=BA=D0=BE=D0=BD=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=82=D0=B5=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- previewer/application/application.go | 3 ++- previewer/application/functions.go | 7 +++---- previewer/application/handlers.go | 27 ++++++++++++++++----------- previewer/webserver/webserver.go | 1 - 4 files changed, 21 insertions(+), 17 deletions(-) delete mode 100644 previewer/webserver/webserver.go diff --git a/previewer/application/application.go b/previewer/application/application.go index 1b3eafa..1f9c6d9 100644 --- a/previewer/application/application.go +++ b/previewer/application/application.go @@ -21,11 +21,12 @@ func New(conf config.Config) *App { oslog.Fatal("не удалось прикрутить логгер: ", err.Error()) } c := cache.NewCache(conf.Cache.Capasity) - return &App{Server: &http.Server{Addr: net.JoinHostPort(conf.Server.Address, conf.Server.Port), Handler: LoggingMiddleware(http.HandlerFunc(Handler), loger)}, Log: loger, Cache: c} + return &App{Server: &http.Server{Addr: net.JoinHostPort(conf.Server.Address, conf.Server.Port)}, Log: loger, Cache: c} } func (s *App) Start() error { s.Log.Infof("Server starting") + s.Handler = loggingMiddleware(handler(&s.Cache), s.Log) _ = s.ListenAndServe() s.Log.Infof("Server stoped") return nil diff --git a/previewer/application/functions.go b/previewer/application/functions.go index e47b574..e3f5114 100644 --- a/previewer/application/functions.go +++ b/previewer/application/functions.go @@ -12,15 +12,15 @@ import ( func buildQuery(u *url.URL) (q models.Query, err error) { t := strings.Split(u.Path, "/") - q.Width,err=strconv.Atoi(t[1]) + q.Width,err=strconv.Atoi(t[2]) if err!=nil { return models.Query{}, errors.New("width must be an integer") } - q.Height,err=strconv.Atoi(t[2]) + q.Height,err=strconv.Atoi(t[3]) if err!=nil { return models.Query{}, errors.New("height must be an integer") } - tn := "http://"+strings.Join(t[3:],"/") + tn := "http://"+strings.Join(t[4:],"/") q.URL,err=q.URL.Parse(tn) if err!=nil { return models.Query{}, errors.New("not valid url") @@ -29,7 +29,6 @@ func buildQuery(u *url.URL) (q models.Query, err error) { } func getPic(q models.Query) ([]byte,http.Header,error) { - client := &http.Client{} req, err := http.NewRequest("GET", "https://" + q.URL.Host + "/" + q.URL.Path, nil) if err != nil { diff --git a/previewer/application/handlers.go b/previewer/application/handlers.go index 6272ffa..6991052 100644 --- a/previewer/application/handlers.go +++ b/previewer/application/handlers.go @@ -1,24 +1,29 @@ package application import ( + "github.com/tiburon-777/OTUS_Project/previewer/cache" "github.com/tiburon-777/OTUS_Project/previewer/logger" "net/http" "time" ) -func Handler(w http.ResponseWriter, r *http.Request) { - q,err := buildQuery(r.URL) - if err!=nil { - writeResponce(w, r.Header,501,[]byte("Can't parse query")) - } - pic, h, err := getPic(q) - if err!=nil { - writeResponce(w, h,501,[]byte("Have problem with cache")) - } - writeResponce(w, r.Header,200,pic) +func handler(c *cache.Cache) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + q,err := buildQuery(r.URL) + if err!=nil { + http.Error(w, "Can't parse query", http.StatusNotFound) + return + } + pic, h, err := getPic(q) + if err!=nil { + http.Error(w, "Have problem with cache", http.StatusInternalServerError) + return + } + writeResponce(w, h,200,pic) + }) } -func LoggingMiddleware(next http.Handler, l logger.Interface) http.HandlerFunc { +func loggingMiddleware(next http.Handler, l logger.Interface) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() defer func() { diff --git a/previewer/webserver/webserver.go b/previewer/webserver/webserver.go deleted file mode 100644 index c5303c2..0000000 --- a/previewer/webserver/webserver.go +++ /dev/null @@ -1 +0,0 @@ -package webserver