Skip to content

Commit

Permalink
code(pkg/parser/engine) - add entry for hide connector and parser
Browse files Browse the repository at this point in the history
  • Loading branch information
PxyUp committed Jan 12, 2024
1 parent 6b0ce25 commit f4aa96b
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 109 deletions.
87 changes: 87 additions & 0 deletions pkg/parser/engine.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package parser

import (
"errors"
"github.com/PxyUp/fitter/pkg/builder"
"github.com/PxyUp/fitter/pkg/config"
"github.com/PxyUp/fitter/pkg/connectors"
"github.com/PxyUp/fitter/pkg/logger"
"github.com/PxyUp/fitter/pkg/plugins/store"
)

var (
errInvalid = errors.New("invalid engine")

_ Engine = &engine{}
nullEngine Engine = &null{}
)

type Engine interface {
Get(model *config.Model, parsedValue builder.Jsonable, index *uint32) (*ParseResult, error)
}

type engine struct {
connector connectors.Connector
parser Factory
logger logger.Logger
}

type null struct {
}

func (n *null) Get(model *config.Model, parsedValue builder.Jsonable, index *uint32) (*ParseResult, error) {
return nil, errInvalid
}

func (e *engine) Get(model *config.Model, parsedValue builder.Jsonable, index *uint32) (*ParseResult, error) {
body, err := e.connector.Get(parsedValue, index)
if err != nil {
e.logger.Errorw("connector return error during fetch data", "error", err.Error())
return nil, err
}
e.logger.Debugw("connector answer", "content", string(body))
return e.parser(body, e.logger).Parse(model)
}

func NewEngine(cfg *config.ConnectorConfig, logger logger.Logger) Engine {
if cfg == nil {
return nullEngine
}

var connector connectors.Connector
if cfg.StaticConfig != nil {
connector = connectors.NewStatic(cfg.StaticConfig).WithLogger(logger.With("connector", "static"))
}
if cfg.ServerConfig != nil {
connector = connectors.NewAPI(cfg.Url, cfg.ServerConfig, nil).WithLogger(logger.With("connector", "server"))
}
if cfg.BrowserConfig != nil {
connector = connectors.NewBrowser(cfg.Url, cfg.BrowserConfig).WithLogger(logger.With("connector", "browser"))
}
if cfg.PluginConnectorConfig != nil {
connector = store.Store.GetConnectorPlugin(cfg.PluginConnectorConfig.Name, cfg.PluginConnectorConfig, logger.With("connector", cfg.PluginConnectorConfig.Name))
}

var parserFactory Factory
if cfg.ResponseType == config.Json {
parserFactory = JsonFactory
}
if cfg.ResponseType == config.HTML {
parserFactory = HTMLFactory
}
if cfg.ResponseType == config.XPath {
parserFactory = XPathFactory
}

if connector == nil || parserFactory == nil {
return nullEngine
}

connector = connectors.WithAttempts(connector, cfg.Attempts)

return &engine{
connector: connector,
parser: parserFactory,
logger: logger,
}
}
49 changes: 1 addition & 48 deletions pkg/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"github.com/PxyUp/fitter/pkg/builder"
"github.com/PxyUp/fitter/pkg/config"
"github.com/PxyUp/fitter/pkg/connectors"
"github.com/PxyUp/fitter/pkg/logger"
"github.com/PxyUp/fitter/pkg/plugins/store"
"github.com/PxyUp/fitter/pkg/utils"
Expand Down Expand Up @@ -96,53 +95,7 @@ func buildGeneratedField(parsedValue builder.Jsonable, fieldType config.FieldTyp
}

if field.Model != nil {
if field.Model.ConnectorConfig == nil || field.Model.Model == nil {
return builder.Null()
}

var connector connectors.Connector

if field.Model.ConnectorConfig.StaticConfig != nil {
connector = connectors.NewStatic(field.Model.ConnectorConfig.StaticConfig).WithLogger(logger.With("connector", "static"))
}

if field.Model.ConnectorConfig.ServerConfig != nil {
connector = connectors.NewAPI(field.Model.ConnectorConfig.Url, field.Model.ConnectorConfig.ServerConfig, nil).WithLogger(logger.With("connector", "server"))
}

if field.Model.ConnectorConfig.BrowserConfig != nil {
connector = connectors.NewBrowser(field.Model.ConnectorConfig.Url, field.Model.ConnectorConfig.BrowserConfig).WithLogger(logger.With("connector", "browser"))
}

if field.Model.ConnectorConfig.PluginConnectorConfig != nil {
connector = store.Store.GetConnectorPlugin(field.Model.ConnectorConfig.PluginConnectorConfig.Name, field.Model.ConnectorConfig.PluginConnectorConfig, logger.With("connector", field.Model.ConnectorConfig.PluginConnectorConfig.Name))
}

var parserFactory Factory
if field.Model.ConnectorConfig.ResponseType == config.Json {
parserFactory = JsonFactory
}
if field.Model.ConnectorConfig.ResponseType == config.HTML {
parserFactory = HTMLFactory
}
if field.Model.ConnectorConfig.ResponseType == config.XPath {
parserFactory = XPathFactory
}

if connector == nil || parserFactory == nil {
return builder.Null()
}

connector = connectors.WithAttempts(connector, field.Model.ConnectorConfig.Attempts)

body, err := connector.Get(parsedValue, index)
if err != nil {
return builder.Null()
}

logger.Debugw("connector answer", "content", string(body))

result, err := parserFactory(body, logger).Parse(field.Model.Model)
result, err := NewEngine(field.Model.ConnectorConfig, logger.With("component", "engine")).Get(field.Model.Model, parsedValue, index)
if err != nil {
return builder.Null()
}
Expand Down
75 changes: 14 additions & 61 deletions pkg/processor/processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ package processor
import (
"errors"
"github.com/PxyUp/fitter/pkg/config"
"github.com/PxyUp/fitter/pkg/connectors"
"github.com/PxyUp/fitter/pkg/logger"
"github.com/PxyUp/fitter/pkg/notifier"
"github.com/PxyUp/fitter/pkg/parser"
"github.com/PxyUp/fitter/pkg/plugins/store"
)

var (
Expand All @@ -20,11 +18,10 @@ type Processor interface {
}

type processor struct {
connector connectors.Connector
parserFactory parser.Factory
logger logger.Logger
model *config.Model
notifier notifier.Notifier
logger logger.Logger
model *config.Model
notifier notifier.Notifier
engine parser.Engine
}

type nullProcessor struct {
Expand All @@ -45,13 +42,12 @@ func (n *nullProcessor) Process() (*parser.ParseResult, error) {
return nil, n.err
}

func New(connector connectors.Connector, parserFactory parser.Factory, model *config.Model, notifier notifier.Notifier) *processor {
func New(engine parser.Engine, model *config.Model, notifier notifier.Notifier) *processor {
return &processor{
connector: connector,
parserFactory: parserFactory,
logger: logger.Null,
model: model,
notifier: notifier,
engine: engine,
logger: logger.Null,
model: model,
notifier: notifier,
}
}

Expand All @@ -61,15 +57,7 @@ func (p *processor) WithLogger(logger logger.Logger) *processor {
}

func (p *processor) Process() (*parser.ParseResult, error) {
body, err := p.connector.Get(nil, nil)
if err != nil {
p.logger.Errorw("connector return error during fetch data", "error", err.Error())
return nil, err
}

p.logger.Debugw("connector answer", "content", string(body))

result, err := p.parserFactory(body, p.logger).Parse(p.model)
result, err := p.engine.Get(p.model, nil, nil)
if p.notifier != nil {
isArray := false
if p.model.ArrayConfig != nil {
Expand All @@ -78,12 +66,12 @@ func (p *processor) Process() (*parser.ParseResult, error) {

errNot := p.notifier.Inform(result, err, isArray)
if errNot != nil {
p.logger.Errorw("cannot notify about result", "error", errNot.Error(), "body", string(body))
p.logger.Errorw("cannot notify about result", "error", errNot.Error())
}
}

if err != nil {
p.logger.Errorw("parser return error processing data", "error", err.Error(), "body", string(body))
p.logger.Errorw("parser return error processing data", "error", err.Error())
return nil, err
}
return result, nil
Expand All @@ -93,36 +81,7 @@ func CreateProcessor(item *config.Item, logger logger.Logger) Processor {
if item.Name == "" {
return Null(errMissingName)
}

if item.ConnectorConfig == nil {
return Null()
}

var connector connectors.Connector
if item.ConnectorConfig.StaticConfig != nil {
connector = connectors.NewStatic(item.ConnectorConfig.StaticConfig).WithLogger(logger.With("connector", "static"))
}
if item.ConnectorConfig.ServerConfig != nil {
connector = connectors.NewAPI(item.ConnectorConfig.Url, item.ConnectorConfig.ServerConfig, nil).WithLogger(logger.With("connector", "server"))
}
if item.ConnectorConfig.BrowserConfig != nil {
connector = connectors.NewBrowser(item.ConnectorConfig.Url, item.ConnectorConfig.BrowserConfig).WithLogger(logger.With("connector", "browser"))
}
if item.ConnectorConfig.PluginConnectorConfig != nil {
connector = store.Store.GetConnectorPlugin(item.ConnectorConfig.PluginConnectorConfig.Name, item.ConnectorConfig.PluginConnectorConfig, logger.With("connector", item.ConnectorConfig.PluginConnectorConfig.Name))
}

var parserFactory parser.Factory
if item.ConnectorConfig.ResponseType == config.Json {
parserFactory = parser.JsonFactory
}
if item.ConnectorConfig.ResponseType == config.HTML {
parserFactory = parser.HTMLFactory
}
if item.ConnectorConfig.ResponseType == config.XPath {
parserFactory = parser.XPathFactory
}


var notifierInstance notifier.Notifier

if item.NotifierConfig != nil {
Expand All @@ -144,13 +103,7 @@ func CreateProcessor(item *config.Item, logger logger.Logger) Processor {

}

if connector == nil || parserFactory == nil {
return Null()
}

connector = connectors.WithAttempts(connector, item.ConnectorConfig.Attempts)

logger = logger.With("name", item.Name)

return New(connector, parserFactory, item.Model, notifierInstance).WithLogger(logger)
return New(parser.NewEngine(item.ConnectorConfig, logger.With("component", "engine")), item.Model, notifierInstance).WithLogger(logger)
}

0 comments on commit f4aa96b

Please sign in to comment.