Skip to content
This repository has been archived by the owner on Oct 8, 2024. It is now read-only.

Commit

Permalink
Merge pull request #97 from bancodobrasil/fix/cache-rulesheets-config
Browse files Browse the repository at this point in the history
fix: change variables
  • Loading branch information
eliasfeijo authored Aug 4, 2023
2 parents e2f7d26 + fb03338 commit b85c77a
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 36 deletions.
3 changes: 1 addition & 2 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ type Config struct {

AuthAPIKey string `mapstructure:"FEATWS_RULLER_API_KEY"`

KnowledgeBaseExpirationMultiplier int64 `mapstructure:"KNOWLEDGE_BASE_EXPIRATION_MULTIPLIER"`
KnowledgeBaseExpirationTimeUnit string `mapstructure:"KNOWLEDGE_BASE_EXPIRATION_TIME_UNIT"`
KnowledgeBaseVersionTTL int64 `mapstructure:"KNOWLEDGE_BASE_VERSION_TTL"`
}

var config = &Config{}
Expand Down
6 changes: 3 additions & 3 deletions docs/docs.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Code generated by swaggo/swag. DO NOT EDIT.

// Package docs GENERATED BY SWAG; DO NOT EDIT
// This file was generated by swaggo/swag
package docs

import "github.com/swaggo/swag"
Expand Down Expand Up @@ -276,7 +276,7 @@ var SwaggerInfo = &swag.Spec{
BasePath: "/api/v1",
Schemes: []string{},
Title: "FeatWS Ruler",
Description: "O projeto Ruler é uma implementação do motor de regras [grule-rule-engine](https://github.com/hyperjumptech/grule-rule-engine), que é utilizado para avaliar regras no formato .grl . O Ruler permite que as regras definidas em arquivos .grl sejam avaliadas de maneira automática e eficiente, ajudando a automatizar as decisões tomadas pelo FeatWS. Isso possibilita que o sistema possa analisar e classificar grandes quantidades de informações de maneira rápida e precisa.\n\nAo utilizar as regras fornecidas pelo projeto Ruler, o FeatWS é capaz de realizar análises de regras em larga escala e fornecer resultados precisos e relevantes para seus usuários. Isso é especialmente importante em áreas como análise de sentimentos em mídias sociais, detecção de fraudes financeiras e análise de dados em geral.\n\nAntes de realizar os testes no Swagger, é necessário autorizar o acesso clicando no botão **Authorize**, ao lado, e inserindo a senha correspondente. Após inserir o campo **value** e clicar no botão **Authorize**, o Swagger estará disponível para ser utilizado.\n\nA seguir é explicado com mais detalhes sobre os endpoints:\n- **/Eval**: Esse endpoint é utilizado apenas para aplicações que possuem uma única folha de regra padrão.\n- **/Eval/{knowledgeBase}**: Nesse endpoint, é necessário informar o parâmetro com o nome da folha de regra desejada e, como resultado, será retornado a última versão da folha de regra correspondente.\n- **/Eval/{knowledgeBase}/{version}**: Nesse endpoint é necessário colocar o parâmetro do nome da folha de regra como também o número da versão da folha de regra que você deseja testar a regra.\n\n**Parameters / Parâmetros**\nNo **knowledgeBase**, você pode especificar o nome da folha de regras que deseja utilizar. Já o **version** você coloca a versão que você deseja avaliar. Em **Paramenter**, é possível enviar os parametros que você deseja testar na folha de regra.",
Description: "O projeto Ruler é uma implementação do motor de regras [grule-rule-engine](https://github.com/hyperjumptech/grule-rule-engine), que é utilizado para avaliar regras no formato .grl . O Ruler permite que as regras definidas em arquivos .grl sejam avaliadas de maneira automática e eficiente, ajudando a automatizar as decisões tomadas pelo FeatWS. Isso possibilita que o sistema possa analisar e classificar grandes quantidades de informações de maneira rápida e precisa.\n\nAo utilizar as regras fornecidas pelo projeto Ruler, o FeatWS é capaz de realizar análises de regras em larga escala e fornecer resultados precisos e relevantes para seus usuários. Isso é especialmente importante em áreas como análise de sentimentos em mídias sociais, detecção de fraudes financeiras e análise de dados em geral.\n\nAntes de realizar os testes no Swagger, é necessário autorizar o acesso clicando no botão **Authorize**, ao lado, e inserindo a senha correspondente. Após inserir o campo **value** e clicar no botão **Authorize**, o Swagger estará disponível para ser utilizado.\n\nA seguir é explicado com mais detalhes sobre os endpoints:\n- **/Eval**: Esse endpoint é utilizado apenas para aplicações que possuem uma única folha de regra padrão.\n- **/Eval/{knowledgeBase}**: Nesse endpoint, é necessário informar o parâmetro com o nome da folha de regra desejada e, como resultado, será retornado a última versão da folha de regra correspondente.\n- **/Eval/{knowledgeBase}/{version}**: Nesse endpoint é necessário colocar o parâmetro do nome da folha de regra como também o número da versão da folha de regra que você deseja testar a regra.\n",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
}
Expand Down
2 changes: 1 addition & 1 deletion docs/swagger.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"swagger": "2.0",
"info": {
"description": "O projeto Ruler é uma implementação do motor de regras [grule-rule-engine](https://github.com/hyperjumptech/grule-rule-engine), que é utilizado para avaliar regras no formato .grl . O Ruler permite que as regras definidas em arquivos .grl sejam avaliadas de maneira automática e eficiente, ajudando a automatizar as decisões tomadas pelo FeatWS. Isso possibilita que o sistema possa analisar e classificar grandes quantidades de informações de maneira rápida e precisa.\n\nAo utilizar as regras fornecidas pelo projeto Ruler, o FeatWS é capaz de realizar análises de regras em larga escala e fornecer resultados precisos e relevantes para seus usuários. Isso é especialmente importante em áreas como análise de sentimentos em mídias sociais, detecção de fraudes financeiras e análise de dados em geral.\n\nAntes de realizar os testes no Swagger, é necessário autorizar o acesso clicando no botão **Authorize**, ao lado, e inserindo a senha correspondente. Após inserir o campo **value** e clicar no botão **Authorize**, o Swagger estará disponível para ser utilizado.\n\nA seguir é explicado com mais detalhes sobre os endpoints:\n- **/Eval**: Esse endpoint é utilizado apenas para aplicações que possuem uma única folha de regra padrão.\n- **/Eval/{knowledgeBase}**: Nesse endpoint, é necessário informar o parâmetro com o nome da folha de regra desejada e, como resultado, será retornado a última versão da folha de regra correspondente.\n- **/Eval/{knowledgeBase}/{version}**: Nesse endpoint é necessário colocar o parâmetro do nome da folha de regra como também o número da versão da folha de regra que você deseja testar a regra.\n\n**Parameters / Parâmetros**\nNo **knowledgeBase**, você pode especificar o nome da folha de regras que deseja utilizar. Já o **version** você coloca a versão que você deseja avaliar. Em **Paramenter**, é possível enviar os parametros que você deseja testar na folha de regra.",
"description": "O projeto Ruler é uma implementação do motor de regras [grule-rule-engine](https://github.com/hyperjumptech/grule-rule-engine), que é utilizado para avaliar regras no formato .grl . O Ruler permite que as regras definidas em arquivos .grl sejam avaliadas de maneira automática e eficiente, ajudando a automatizar as decisões tomadas pelo FeatWS. Isso possibilita que o sistema possa analisar e classificar grandes quantidades de informações de maneira rápida e precisa.\n\nAo utilizar as regras fornecidas pelo projeto Ruler, o FeatWS é capaz de realizar análises de regras em larga escala e fornecer resultados precisos e relevantes para seus usuários. Isso é especialmente importante em áreas como análise de sentimentos em mídias sociais, detecção de fraudes financeiras e análise de dados em geral.\n\nAntes de realizar os testes no Swagger, é necessário autorizar o acesso clicando no botão **Authorize**, ao lado, e inserindo a senha correspondente. Após inserir o campo **value** e clicar no botão **Authorize**, o Swagger estará disponível para ser utilizado.\n\nA seguir é explicado com mais detalhes sobre os endpoints:\n- **/Eval**: Esse endpoint é utilizado apenas para aplicações que possuem uma única folha de regra padrão.\n- **/Eval/{knowledgeBase}**: Nesse endpoint, é necessário informar o parâmetro com o nome da folha de regra desejada e, como resultado, será retornado a última versão da folha de regra correspondente.\n- **/Eval/{knowledgeBase}/{version}**: Nesse endpoint é necessário colocar o parâmetro do nome da folha de regra como também o número da versão da folha de regra que você deseja testar a regra.\n",
"title": "FeatWS Ruler",
"termsOfService": "http://swagger.io/terms/",
"contact": {
Expand Down
5 changes: 1 addition & 4 deletions docs/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ info:
email: support@swagger.io
name: API Support
url: http://www.swagger.io/support
description: |-
description: |
O projeto Ruler é uma implementação do motor de regras [grule-rule-engine](https://github.com/hyperjumptech/grule-rule-engine), que é utilizado para avaliar regras no formato .grl . O Ruler permite que as regras definidas em arquivos .grl sejam avaliadas de maneira automática e eficiente, ajudando a automatizar as decisões tomadas pelo FeatWS. Isso possibilita que o sistema possa analisar e classificar grandes quantidades de informações de maneira rápida e precisa.
Ao utilizar as regras fornecidas pelo projeto Ruler, o FeatWS é capaz de realizar análises de regras em larga escala e fornecer resultados precisos e relevantes para seus usuários. Isso é especialmente importante em áreas como análise de sentimentos em mídias sociais, detecção de fraudes financeiras e análise de dados em geral.
Expand All @@ -20,9 +20,6 @@ info:
- **/Eval**: Esse endpoint é utilizado apenas para aplicações que possuem uma única folha de regra padrão.
- **/Eval/{knowledgeBase}**: Nesse endpoint, é necessário informar o parâmetro com o nome da folha de regra desejada e, como resultado, será retornado a última versão da folha de regra correspondente.
- **/Eval/{knowledgeBase}/{version}**: Nesse endpoint é necessário colocar o parâmetro do nome da folha de regra como também o número da versão da folha de regra que você deseja testar a regra.
**Parameters / Parâmetros**
No **knowledgeBase**, você pode especificar o nome da folha de regras que deseja utilizar. Já o **version** você coloca a versão que você deseja avaliar. Em **Paramenter**, é possível enviar os parametros que você deseja testar na folha de regra.
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
Expand Down
37 changes: 11 additions & 26 deletions services/rulles.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,19 +130,17 @@ var EvalService IEval = NewEval()
// Property:
// - knowledgeLibrary - `knowledgeLibrary` is a pointer to an `ast.KnowledgeLibrary` object. Itis a property of the `Eval` struct.
type Eval struct {
knowledgeLibrary *ast.KnowledgeLibrary
knowledgeBaseCache map[knowledgeBaseInfo]*knowledgeBaseCache
expirationType string
expirationMultiplier int64
knowledgeLibrary *ast.KnowledgeLibrary
knowledgeBaseCache map[knowledgeBaseInfo]*knowledgeBaseCache
versionTTL int64
}

// NewEval creates a new instance of the Eval struct with an empty knowledge library.
func NewEval() Eval {
return Eval{
knowledgeLibrary: ast.NewKnowledgeLibrary(),
knowledgeBaseCache: map[knowledgeBaseInfo]*knowledgeBaseCache{},
expirationType: config.GetConfig().KnowledgeBaseExpirationTimeUnit,
expirationMultiplier: config.GetConfig().KnowledgeBaseExpirationMultiplier,
knowledgeLibrary: ast.NewKnowledgeLibrary(),
knowledgeBaseCache: map[knowledgeBaseInfo]*knowledgeBaseCache{},
versionTTL: config.GetConfig().KnowledgeBaseVersionTTL,
}
}

Expand Down Expand Up @@ -175,21 +173,15 @@ func (s Eval) GetKnowledgeBase(knowledgeBaseName string, version string) (*ast.K
existing := s.knowledgeBaseCache[info]

if existing == nil {
var ExpirationDate time.Time

switch s.expirationType {
case "seconds":
ExpirationDate = time.Now().Add(time.Duration(s.expirationMultiplier) * time.Second)
case "minutes":
ExpirationDate = time.Now().Add(time.Duration(s.expirationMultiplier) * time.Minute)
case "hours":
ExpirationDate = time.Now().Add(time.Duration(s.expirationMultiplier) * time.Hour)
}
var ExpirationDate = time.Now().Add(time.Duration(s.versionTTL) * time.Second)

existing = &knowledgeBaseCache{
KnowledgeBase: s.GetKnowledgeLibrary().GetKnowledgeBase(knowledgeBaseName, version),
ExpirationDate: ExpirationDate,
}

s.knowledgeBaseCache[info] = existing

return existing.KnowledgeBase, nil
}
if existing.KnowledgeBase.Version != "latest" && len(existing.KnowledgeBase.RuleEntries) > 0 {
Expand Down Expand Up @@ -222,14 +214,7 @@ func (s Eval) GetKnowledgeBase(knowledgeBaseName string, version string) (*ast.K
loadMutex.Unlock()

existing.KnowledgeBase = s.GetKnowledgeLibrary().GetKnowledgeBase(knowledgeBaseName, version)
switch s.expirationType {
case "seconds":
existing.ExpirationDate = time.Now().Add(time.Duration(s.expirationMultiplier) * time.Second)
case "minutes":
existing.ExpirationDate = time.Now().Add(time.Duration(s.expirationMultiplier) * time.Minute)
case "hours":
existing.ExpirationDate = time.Now().Add(time.Duration(s.expirationMultiplier) * time.Hour)
}
existing.ExpirationDate = time.Now().Add(time.Duration(s.versionTTL) * time.Second)

return existing.KnowledgeBase, nil

Expand Down

0 comments on commit b85c77a

Please sign in to comment.