finished getURLs and notify filter

This commit is contained in:
BroodjeAap 2022-10-03 20:28:56 +00:00
parent 9b5c247737
commit 6330a87195

View file

@ -21,6 +21,7 @@ import (
) )
func processFilters(filters []Filter, db *gorm.DB, urlCache map[string]string, useCache bool, setCache bool) { func processFilters(filters []Filter, db *gorm.DB, urlCache map[string]string, useCache bool, setCache bool) {
allFilters := filters
processedMap := make(map[uint]bool, len(filters)) processedMap := make(map[uint]bool, len(filters))
for len(filters) > 0 { for len(filters) > 0 {
filter := &filters[0] filter := &filters[0]
@ -36,12 +37,12 @@ func processFilters(filters []Filter, db *gorm.DB, urlCache map[string]string, u
filters = append(filters, *filter) filters = append(filters, *filter)
continue continue
} }
getFilterResult(filter, db, urlCache, useCache, setCache) getFilterResult(allFilters, filter, db, urlCache, useCache, setCache)
processedMap[filter.ID] = true processedMap[filter.ID] = true
} }
} }
func getFilterResult(filter *Filter, db *gorm.DB, urlCache map[string]string, useCache bool, setCache bool) { func getFilterResult(filters []Filter, filter *Filter, db *gorm.DB, urlCache map[string]string, useCache bool, setCache bool) {
switch { switch {
case filter.Type == "gurl": case filter.Type == "gurl":
{ {
@ -49,7 +50,7 @@ func getFilterResult(filter *Filter, db *gorm.DB, urlCache map[string]string, us
} }
case filter.Type == "gurls": case filter.Type == "gurls":
{ {
getFilterResultURL(filter, urlCache, useCache, setCache) getFilterResultURLs(filter, urlCache, useCache, setCache)
} }
case filter.Type == "xpath": case filter.Type == "xpath":
{ {
@ -114,7 +115,7 @@ func getFilterResult(filter *Filter, db *gorm.DB, urlCache map[string]string, us
} }
case filter.Type == "notify": case filter.Type == "notify":
{ {
notifyFilter(filter, db) notifyFilter(filters, filter, db)
} }
case filter.Type == "condition": case filter.Type == "condition":
{ {
@ -179,6 +180,35 @@ func getFilterResultURL(filter *Filter, urlCache map[string]string, useCache boo
} }
} }
func getFilterResultURLs(filter *Filter, urlCache map[string]string, useCache bool, setCache bool) {
for _, parent := range filter.Parents {
for _, result := range parent.Results {
url := result
val, exists := urlCache[url]
if useCache && exists {
filter.Results = append(filter.Results, val)
continue
}
resp, err := http.Get(url)
if err != nil {
filter.log("Could not fetch url: ", url, " - ", err)
continue
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
filter.log("Could not fetch url: ", url, " - ", err)
continue
}
str := string(body)
filter.Results = append(filter.Results, str)
if setCache {
urlCache[url] = str
}
}
}
}
func getFilterResultXPath(filter *Filter) { func getFilterResultXPath(filter *Filter) {
for _, parent := range filter.Parents { for _, parent := range filter.Parents {
for _, result := range parent.Results { for _, result := range parent.Results {
@ -249,7 +279,7 @@ func getFilterResultReplace(filter *Filter) {
func getFilterResultMatch(filter *Filter) { func getFilterResultMatch(filter *Filter) {
r, err := regexp.Compile(filter.Var1) r, err := regexp.Compile(filter.Var1)
if err != nil { if err != nil {
log.Print(err) filter.log("Could not compile regex: ", err)
return return
} }
for _, parent := range filter.Parents { for _, parent := range filter.Parents {
@ -480,11 +510,11 @@ func getFilterResultRound(filter *Filter) {
func storeFilterResult(filter *Filter, db *gorm.DB) { func storeFilterResult(filter *Filter, db *gorm.DB) {
var previousOutput FilterOutput var previousOutput FilterOutput
db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput) db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput)
// TODO fix filter.Name above and parent.name below
for _, parent := range filter.Parents { for _, parent := range filter.Parents {
for _, result := range parent.Results { for _, result := range parent.Results {
if previousOutput.WatchID == 0 { if previousOutput.WatchID == 0 {
previousOutput.Name = filter.Name previousOutput.Name = parent.Name
previousOutput.Time = time.Now() previousOutput.Time = time.Now()
previousOutput.Value = result previousOutput.Value = result
previousOutput.WatchID = filter.WatchID previousOutput.WatchID = filter.WatchID
@ -702,16 +732,27 @@ func getFilterResultConditionHigherThan(filter *Filter) {
} }
} }
func notifyFilter(filter *Filter, db *gorm.DB) { func notifyFilter(filters []Filter, filter *Filter, db *gorm.DB) {
tmpl, err := template.New("test").Parse(filter.Var1) haveResults := false
for _, parent := range filter.Parents {
if len(parent.Results) > 0 {
haveResults = true
}
}
if !haveResults {
filter.log("No output from previous filter(s), need at least 1 to 'trigger'")
log.Println("test")
return
}
tmpl, err := template.New("notify").Parse(filter.Var1)
if err != nil { if err != nil {
filter.log("Could not parse template: ", err) filter.log("Could not parse template: ", err)
return return
} }
dataMap := make(map[string]any, 20) dataMap := make(map[string]any, 20)
for _, parent := range filter.Parents { for _, f := range filters {
dataMap[parent.Name] = html.UnescapeString(strings.Join(parent.Results, ", ")) dataMap[f.Name] = html.UnescapeString(strings.Join(f.Results, ", "))
} }
id := filter.WatchID id := filter.WatchID