Fenpaws
b6d0f4d63f
Better and more extensive logging with proper logging levels, also new env variables are created to control those. Reviewed-on: anthrove/e621-to-graph#16 Reviewed-by: Lennard Brinkhaus <lennard.brinkhaus@noreply.localhost> Co-authored-by: Fenpaws <soxx@fenpa.ws> Co-committed-by: Fenpaws <soxx@fenpa.ws>
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package e621
|
|
|
|
import (
|
|
"encoding/json"
|
|
"git.dragse.it/anthrove/e621-to-graph/pkg/e621"
|
|
pgkError "git.dragse.it/anthrove/e621-to-graph/pkg/error"
|
|
log "github.com/sirupsen/logrus"
|
|
"net/http"
|
|
"reflect"
|
|
)
|
|
|
|
type e621APITask[T e621.DataType] struct {
|
|
uri string
|
|
}
|
|
|
|
func NewE621ApiTask[T e621.DataType](uri string) e621.Task[T] {
|
|
log.WithFields(log.Fields{
|
|
"uri": uri,
|
|
"type": reflect.TypeOf(*new(T)),
|
|
}).Debug("e621: task created")
|
|
return &e621APITask[T]{
|
|
uri: uri,
|
|
}
|
|
}
|
|
|
|
func (e e621APITask[T]) UriPath() string {
|
|
return e.uri
|
|
}
|
|
|
|
func (e e621APITask[T]) HandleStatusCode(statusCode int) e621.DataResponse[T] {
|
|
var err error
|
|
switch statusCode {
|
|
case 421:
|
|
err = pgkError.RateLimitReachedError{}
|
|
case 424:
|
|
err = pgkError.InvalidParametersError{}
|
|
case 520:
|
|
err = pgkError.OriginConnectionTimeOutError{}
|
|
case 522:
|
|
err = pgkError.OriginConnectionTimeOutError{}
|
|
case 524:
|
|
err = pgkError.OriginConnectionTimeOutError{}
|
|
case 525:
|
|
err = pgkError.SSLHandshakeFailedError{}
|
|
default:
|
|
err = pgkError.StatusCodesToError(statusCode)
|
|
}
|
|
|
|
log.WithFields(log.Fields{
|
|
"status_code": statusCode,
|
|
}).Debug("e621: handel status code")
|
|
return e621.DataResponse[T]{Error: err}
|
|
}
|
|
|
|
func (e e621APITask[T]) HandleResponse(responseData *http.Response) e621.DataResponse[T] {
|
|
var data T
|
|
log.WithFields(log.Fields{
|
|
"type": reflect.TypeOf(*new(T)),
|
|
}).Debug("e621: decoding json response")
|
|
err := json.NewDecoder(responseData.Body).Decode(&data)
|
|
defer responseData.Body.Close()
|
|
if err != nil {
|
|
return e621.DataResponse[T]{Error: err}
|
|
}
|
|
return e621.DataResponse[T]{Data: data}
|
|
}
|
|
|
|
func (e e621APITask[T]) HandleError(error error) e621.DataResponse[T] {
|
|
return e621.DataResponse[T]{Error: error}
|
|
}
|