added condition filter type
This commit is contained in:
parent
5a0e6c0e43
commit
aab64cc59b
4 changed files with 467 additions and 3 deletions
218
scraping.go
218
scraping.go
|
@ -107,6 +107,39 @@ func getFilterResult(filter *Filter, db *gorm.DB) {
|
|||
{
|
||||
storeFilterResult(filter, db)
|
||||
}
|
||||
case filter.Type == "condition":
|
||||
{
|
||||
switch filter.Var1 {
|
||||
case "diff":
|
||||
{
|
||||
getFilterResultConditionDiff(filter, db)
|
||||
}
|
||||
case "lowerl":
|
||||
{
|
||||
getFilterResultConditionLowerLast(filter, db)
|
||||
}
|
||||
case "lowest":
|
||||
{
|
||||
getFilterResultConditionLowest(filter, db)
|
||||
}
|
||||
case "lowert":
|
||||
{
|
||||
getFilterResultConditionLowerThan(filter, db)
|
||||
}
|
||||
case "higherl":
|
||||
{
|
||||
getFilterResultConditionHigherLast(filter, db)
|
||||
}
|
||||
case "highest":
|
||||
{
|
||||
getFilterResultConditionHighest(filter, db)
|
||||
}
|
||||
case "highert":
|
||||
{
|
||||
getFilterResultConditionHigherThan(filter, db)
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
log.Println("getFilterResult called with filter.Type == ", filter.Type)
|
||||
}
|
||||
|
@ -394,9 +427,10 @@ func getFilterResultRound(filter *Filter) {
|
|||
|
||||
func storeFilterResult(filter *Filter, db *gorm.DB) {
|
||||
var previousOutput FilterOutput
|
||||
db.Model(&FilterOutput{}).Order("time desc").Limit(1).Find(&previousOutput, "watch_id = ? AND name = ?", filter.WatchID, filter.Name)
|
||||
db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput)
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
log.Println(previousOutput)
|
||||
if previousOutput.WatchID == 0 {
|
||||
previousOutput.Name = filter.Name
|
||||
previousOutput.Time = time.Now()
|
||||
|
@ -412,3 +446,185 @@ func storeFilterResult(filter *Filter, db *gorm.DB) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionDiff(filter *Filter, db *gorm.DB) {
|
||||
var previousOutput FilterOutput
|
||||
db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput)
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
if previousOutput.WatchID == 0 {
|
||||
filter.Results = append(filter.Results, result)
|
||||
} else if previousOutput.Value != result {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionLowerLast(filter *Filter, db *gorm.DB) {
|
||||
var previousOutput FilterOutput
|
||||
db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput)
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
if previousOutput.WatchID == 0 {
|
||||
filter.Results = append(filter.Results, result)
|
||||
} else {
|
||||
lastValue, err := strconv.ParseFloat(previousOutput.Value, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert previous value to number:", previousOutput.Value)
|
||||
continue
|
||||
}
|
||||
number, err := strconv.ParseFloat(result, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert new value to number:", result)
|
||||
continue
|
||||
}
|
||||
if number < lastValue {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionLowest(filter *Filter, db *gorm.DB) {
|
||||
var previousOutputs []FilterOutput
|
||||
db.Model(&FilterOutput{}).Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Find(&previousOutputs)
|
||||
lowest := math.MaxFloat64
|
||||
if previousOutputs != nil {
|
||||
for _, previousOutput := range previousOutputs {
|
||||
number, err := strconv.ParseFloat(previousOutput.Value, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert result to number:", previousOutput.Value)
|
||||
continue
|
||||
}
|
||||
if number < lowest {
|
||||
lowest = number
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
number, err := strconv.ParseFloat(result, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert result to number:", result)
|
||||
continue
|
||||
}
|
||||
if number < lowest {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionLowerThan(filter *Filter, db *gorm.DB) {
|
||||
if filter.Var2 == nil {
|
||||
log.Println("No threshold given for Lower Than Filter")
|
||||
return
|
||||
}
|
||||
threshold, err := strconv.ParseFloat(*filter.Var2, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert convert threshold to number:", *filter.Var2)
|
||||
return
|
||||
}
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
number, err := strconv.ParseFloat(result, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert new value to number:", result)
|
||||
continue
|
||||
}
|
||||
if number < threshold {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionHigherLast(filter *Filter, db *gorm.DB) {
|
||||
var previousOutput FilterOutput
|
||||
db.Model(&FilterOutput{}).Order("time desc").Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Limit(1).Find(&previousOutput)
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
if previousOutput.WatchID == 0 {
|
||||
filter.Results = append(filter.Results, result)
|
||||
} else {
|
||||
lastValue, err := strconv.ParseFloat(previousOutput.Value, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert previous value to number:", previousOutput.Value)
|
||||
continue
|
||||
}
|
||||
number, err := strconv.ParseFloat(result, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert new value to number:", result)
|
||||
continue
|
||||
}
|
||||
if number > lastValue {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionHighest(filter *Filter, db *gorm.DB) {
|
||||
var previousOutputs []FilterOutput
|
||||
db.Model(&FilterOutput{}).Where("watch_id = ? AND name = ?", filter.WatchID, filter.Name).Find(&previousOutputs)
|
||||
highest := math.MaxFloat64
|
||||
if previousOutputs != nil {
|
||||
for _, previousOutput := range previousOutputs {
|
||||
number, err := strconv.ParseFloat(previousOutput.Value, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert result to number:", previousOutput.Value)
|
||||
continue
|
||||
}
|
||||
if number > highest {
|
||||
highest = number
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
number, err := strconv.ParseFloat(result, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert result to number:", result)
|
||||
continue
|
||||
}
|
||||
if number > highest {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getFilterResultConditionHigherThan(filter *Filter, db *gorm.DB) {
|
||||
if filter.Var2 == nil {
|
||||
log.Println("No threshold given for Higher Than Filter")
|
||||
return
|
||||
}
|
||||
threshold, err := strconv.ParseFloat(*filter.Var2, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert convert threshold to number:", *filter.Var2)
|
||||
return
|
||||
}
|
||||
for _, parent := range filter.Parents {
|
||||
for _, result := range parent.Results {
|
||||
number, err := strconv.ParseFloat(result, 64)
|
||||
if err != nil {
|
||||
log.Println("Could not convert new value to number:", result)
|
||||
continue
|
||||
}
|
||||
if number > threshold {
|
||||
filter.Results = append(filter.Results, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func notifyFilter(filter *Filter, db *gorm.DB) {
|
||||
|
||||
}
|
||||
|
|
122
static/edit.js
122
static/edit.js
|
@ -367,6 +367,87 @@ function onTypeChange(node) {
|
|||
var3Input.disabled = true;
|
||||
var3Label.innerHTML = "-";
|
||||
var3Div.appendChild(var3Input);
|
||||
break;
|
||||
}
|
||||
case "condition": {
|
||||
var conditionSelect = document.createElement("select");
|
||||
conditionSelect.name = "var1";
|
||||
conditionSelect.id = "var1Input";
|
||||
conditionSelect.classList.add("form-control");
|
||||
var differentThenLast = document.createElement("option");
|
||||
differentThenLast.value = "diff";
|
||||
differentThenLast.innerHTML = "Different Then Last";
|
||||
conditionSelect.appendChild(differentThenLast);
|
||||
var lowerThenLast = document.createElement("option");
|
||||
lowerThenLast.value = "lowerl";
|
||||
lowerThenLast.innerHTML = "Lower Then Last";
|
||||
conditionSelect.appendChild(lowerThenLast);
|
||||
var lowestEver = document.createElement("option");
|
||||
lowestEver.value = "lowest";
|
||||
lowestEver.innerHTML = "Lowest Ever";
|
||||
conditionSelect.appendChild(lowestEver);
|
||||
var lowerThan = document.createElement("option");
|
||||
lowerThan.value = "lowert";
|
||||
lowerThan.innerHTML = "Lower Than";
|
||||
conditionSelect.appendChild(lowerThan);
|
||||
var higherThenLast = document.createElement("option");
|
||||
higherThenLast.value = "higherl";
|
||||
higherThenLast.innerHTML = "Higher Then Last";
|
||||
conditionSelect.appendChild(higherThenLast);
|
||||
var highestEver = document.createElement("option");
|
||||
highestEver.value = "highest";
|
||||
highestEver.innerHTML = "Highest Ever";
|
||||
conditionSelect.appendChild(highestEver);
|
||||
var higherThan = document.createElement("option");
|
||||
higherThan.value = "highert";
|
||||
higherThan.innerHTML = "Higher Than";
|
||||
conditionSelect.appendChild(higherThan);
|
||||
conditionSelect.onchange = function () { onConditionChange(node); };
|
||||
var1Div.appendChild(conditionSelect);
|
||||
var var2Input = document.createElement("input");
|
||||
var2Input.name = "var2";
|
||||
var2Input.id = "var2Input";
|
||||
var2Input.value = var2Value;
|
||||
var2Input.classList.add("form-control");
|
||||
var2Input.disabled = true;
|
||||
var2Label.innerHTML = "-";
|
||||
var2Div.appendChild(var2Input);
|
||||
var var3Input = document.createElement("input");
|
||||
var3Input.name = "var3";
|
||||
var3Input.id = "var3Input";
|
||||
var3Input.value = var3Value;
|
||||
var3Input.classList.add("form-control");
|
||||
var3Input.disabled = true;
|
||||
var3Label.innerHTML = "-";
|
||||
var3Div.appendChild(var3Input);
|
||||
break;
|
||||
}
|
||||
case "notify": {
|
||||
var var1Input = document.createElement("textarea");
|
||||
var1Input.name = "var1";
|
||||
var1Input.id = "var1Input";
|
||||
var1Input.value = var1Value;
|
||||
var1Input.classList.add("form-control");
|
||||
var1Label.innerHTML = "Template";
|
||||
var1Input.placeholder = "{{ .Watch.Name }} new lowest price: {{ Price }}!";
|
||||
var1Div.appendChild(var1Input);
|
||||
var var2Input = document.createElement("input");
|
||||
var2Input.name = "var2";
|
||||
var2Input.id = "var2Input";
|
||||
var2Input.value = var2Value;
|
||||
var2Input.classList.add("form-control");
|
||||
var2Input.disabled = true;
|
||||
var2Label.innerHTML = "-";
|
||||
var2Div.appendChild(var2Input);
|
||||
var var3Input = document.createElement("input");
|
||||
var3Input.name = "var3";
|
||||
var3Input.id = "var3Input";
|
||||
var3Input.value = var3Value;
|
||||
var3Input.classList.add("form-control");
|
||||
var3Input.disabled = true;
|
||||
var3Label.innerHTML = "-";
|
||||
var3Div.appendChild(var3Input);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -399,8 +480,47 @@ function onMathChange(node) {
|
|||
var2Label.innerHTML = "-";
|
||||
}
|
||||
}
|
||||
function onConditionChange(node) {
|
||||
if (node === void 0) { node = null; }
|
||||
var var1Input = document.getElementById("var1Input");
|
||||
var var1Label = document.getElementById("var1Label");
|
||||
var var2Input = document.getElementById("var2Input");
|
||||
var var2Label = document.getElementById("var2Label");
|
||||
var var3Input = document.getElementById("var3Input");
|
||||
var var3Label = document.getElementById("var3Label");
|
||||
var var2Value = "";
|
||||
var var3Value = "";
|
||||
if (node != null) {
|
||||
// @ts-ignore
|
||||
var2Value = node.meta.var2;
|
||||
// @ts-ignore
|
||||
var3Value = node.meta.var3;
|
||||
}
|
||||
switch (var1Input.value) {
|
||||
case "lowert": {
|
||||
var2Input.disabled = false;
|
||||
var2Input.type = "number";
|
||||
var2Input.value = var2Value;
|
||||
var2Label.innerHTML = "Threshold";
|
||||
break;
|
||||
}
|
||||
case "highert": {
|
||||
var2Input.disabled = false;
|
||||
var2Input.type = "number";
|
||||
var2Input.value = var2Value;
|
||||
var2Label.innerHTML = "Threshold";
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
var2Input.disabled = true;
|
||||
var2Input.type = "text";
|
||||
var2Input.value = var2Value;
|
||||
var2Label.innerHTML = "-";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
function onSubmitNewFilter() {
|
||||
console.log("TEST");
|
||||
var nameInput = document.getElementById("nameInput");
|
||||
var name = nameInput.value;
|
||||
var selectType = document.getElementById("typeInput");
|
||||
|
|
128
static/edit.ts
128
static/edit.ts
|
@ -358,6 +358,91 @@ function onTypeChange(node: DiagramNode | null = null){
|
|||
var3Input.disabled = true;
|
||||
var3Label.innerHTML = "-";
|
||||
var3Div.appendChild(var3Input);
|
||||
break;
|
||||
}
|
||||
case "condition":{
|
||||
let conditionSelect = document.createElement("select");
|
||||
conditionSelect.name = "var1";
|
||||
conditionSelect.id = "var1Input";
|
||||
conditionSelect.classList.add("form-control");
|
||||
let differentThenLast = document.createElement("option");
|
||||
differentThenLast.value = "diff"
|
||||
differentThenLast.innerHTML = "Different Then Last";
|
||||
conditionSelect.appendChild(differentThenLast);
|
||||
let lowerThenLast = document.createElement("option");
|
||||
lowerThenLast.value = "lowerl"
|
||||
lowerThenLast.innerHTML = "Lower Then Last";
|
||||
conditionSelect.appendChild(lowerThenLast);
|
||||
let lowestEver = document.createElement("option");
|
||||
lowestEver.value = "lowest"
|
||||
lowestEver.innerHTML = "Lowest Ever";
|
||||
conditionSelect.appendChild(lowestEver);
|
||||
let lowerThan = document.createElement("option");
|
||||
lowerThan.value = "lowert"
|
||||
lowerThan.innerHTML = "Lower Than";
|
||||
conditionSelect.appendChild(lowerThan);
|
||||
let higherThenLast = document.createElement("option");
|
||||
higherThenLast.value = "higherl"
|
||||
higherThenLast.innerHTML = "Higher Then Last";
|
||||
conditionSelect.appendChild(higherThenLast);
|
||||
let highestEver = document.createElement("option");
|
||||
highestEver.value = "highest"
|
||||
highestEver.innerHTML = "Highest Ever";
|
||||
conditionSelect.appendChild(highestEver);
|
||||
let higherThan = document.createElement("option");
|
||||
higherThan.value = "highert"
|
||||
higherThan.innerHTML = "Higher Than";
|
||||
conditionSelect.appendChild(higherThan);
|
||||
conditionSelect.onchange = function() {onConditionChange(node)}
|
||||
var1Div.appendChild(conditionSelect);
|
||||
|
||||
let var2Input = document.createElement("input");
|
||||
var2Input.name = "var2";
|
||||
var2Input.id = "var2Input";
|
||||
var2Input.value = var2Value;
|
||||
var2Input.classList.add("form-control")
|
||||
var2Input.disabled = true;
|
||||
var2Label.innerHTML = "-";
|
||||
var2Div.appendChild(var2Input);
|
||||
|
||||
let var3Input = document.createElement("input");
|
||||
var3Input.name = "var3";
|
||||
var3Input.id = "var3Input";
|
||||
var3Input.value = var3Value;
|
||||
var3Input.classList.add("form-control");
|
||||
var3Input.disabled = true;
|
||||
var3Label.innerHTML = "-";
|
||||
var3Div.appendChild(var3Input);
|
||||
break;
|
||||
}
|
||||
case "notify":{
|
||||
let var1Input = document.createElement("textarea");
|
||||
var1Input.name = "var1";
|
||||
var1Input.id = "var1Input";
|
||||
var1Input.value = var1Value;
|
||||
var1Input.classList.add("form-control")
|
||||
var1Label.innerHTML = "Template";
|
||||
var1Input.placeholder = "{{ .Watch.Name }} new lowest price: {{ Price }}!";
|
||||
var1Div.appendChild(var1Input);
|
||||
|
||||
let var2Input = document.createElement("input");
|
||||
var2Input.name = "var2";
|
||||
var2Input.id = "var2Input";
|
||||
var2Input.value = var2Value;
|
||||
var2Input.classList.add("form-control")
|
||||
var2Input.disabled = true;
|
||||
var2Label.innerHTML = "-";
|
||||
var2Div.appendChild(var2Input);
|
||||
|
||||
let var3Input = document.createElement("input");
|
||||
var3Input.name = "var3";
|
||||
var3Input.id = "var3Input";
|
||||
var3Input.value = var3Value;
|
||||
var3Input.classList.add("form-control");
|
||||
var3Input.disabled = true;
|
||||
var3Label.innerHTML = "-";
|
||||
var3Div.appendChild(var3Input);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -393,8 +478,49 @@ function onMathChange(node: DiagramNode | null = null){
|
|||
}
|
||||
}
|
||||
|
||||
function onConditionChange(node: DiagramNode | null = null){
|
||||
let var1Input = document.getElementById("var1Input") as HTMLSelectElement;
|
||||
let var1Label = document.getElementById("var1Label") as HTMLLabelElement;
|
||||
let var2Input = document.getElementById("var2Input") as HTMLInputElement;
|
||||
let var2Label = document.getElementById("var2Label") as HTMLLabelElement;
|
||||
let var3Input = document.getElementById("var3Input") as HTMLInputElement;
|
||||
let var3Label = document.getElementById("var3Label") as HTMLLabelElement;
|
||||
|
||||
let var2Value = "";
|
||||
let var3Value = "";
|
||||
if (node != null){
|
||||
// @ts-ignore
|
||||
var2Value = node.meta.var2;
|
||||
// @ts-ignore
|
||||
var3Value = node.meta.var3;
|
||||
}
|
||||
|
||||
switch(var1Input.value) {
|
||||
case "lowert": {
|
||||
var2Input.disabled = false;
|
||||
var2Input.type = "number";
|
||||
var2Input.value = var2Value;
|
||||
var2Label.innerHTML = "Threshold";
|
||||
break;
|
||||
}
|
||||
case "highert": {
|
||||
var2Input.disabled = false;
|
||||
var2Input.type = "number";
|
||||
var2Input.value = var2Value;
|
||||
var2Label.innerHTML = "Threshold";
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
var2Input.disabled = true;
|
||||
var2Input.type = "text";
|
||||
var2Input.value = var2Value;
|
||||
var2Label.innerHTML = "-";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onSubmitNewFilter(){
|
||||
console.log("TEST")
|
||||
let nameInput = document.getElementById("nameInput") as HTMLInputElement;
|
||||
let name = nameInput.value;
|
||||
let selectType = document.getElementById("typeInput") as HTMLSelectElement;
|
||||
|
|
|
@ -46,6 +46,8 @@
|
|||
<option value="substring">Substring</option>
|
||||
<option value="math">Math</option>
|
||||
<option value="store">Store</option>
|
||||
<option value="condition">Condition</option>
|
||||
<option value="notify">Notify</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue