Hallucinate some wires
This commit is contained in:
44
api/api.go
44
api/api.go
@@ -1,4 +1,4 @@
|
||||
package main
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
@@ -22,7 +22,7 @@ type APIStatisticsRequest struct {
|
||||
}
|
||||
|
||||
type APIAnalyticsRequest struct {
|
||||
Filters AnalyticsFilters `json:"filters"`
|
||||
Filters types.AnalyticsFilters `json:"filters"`
|
||||
}
|
||||
|
||||
type APIModuleCoOccurrenceRequest struct {
|
||||
@@ -64,109 +64,109 @@ type APIImageData struct {
|
||||
|
||||
// Analytics handlers
|
||||
func handleAnalyticsTimeByHour(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryTimeByHour(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsTimeByDay(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryTimeByDay(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsTimeByDate(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryTimeByDate(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsTimeByMonth(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryTimeByMonth(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsLocationBySystem(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryLocationBySystem(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsLocationByRegion(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryLocationByRegion(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsLocationByConstellation(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryLocationByConstellation(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsLocationBySecurity(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryLocationBySecurity(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsShipByVictim(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryShipByVictim(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsShipByAttacker(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryShipByAttacker(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsPlayerByVictimCharacter(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryPlayerByVictimCharacter(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsPlayerByVictimCorporation(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryPlayerByVictimCorporation(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsPlayerByVictimAlliance(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryPlayerByVictimAlliance(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsPlayerByAttackerCharacter(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryPlayerByAttackerCharacter(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsPlayerByAttackerCorporation(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryPlayerByAttackerCorporation(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsPlayerByAttackerAlliance(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryPlayerByAttackerAlliance(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsModuleBySlotType(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryModuleBySlotType(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
|
||||
func handleAnalyticsModuleByModule(w http.ResponseWriter, r *http.Request) {
|
||||
handleAnalyticsQuery(w, r, func(db DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
handleAnalyticsQuery(w, r, func(database db.DB, req APIAnalyticsRequest) (interface{}, error) {
|
||||
return db.QueryModuleByModule(r.Context(), req.Filters)
|
||||
})
|
||||
}
|
||||
@@ -209,7 +209,7 @@ func handleAnalyticsModuleCoOccurrence(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
type APIKillmailIDsRequest struct {
|
||||
Filters AnalyticsFilters `json:"filters"`
|
||||
Filters types.AnalyticsFilters `json:"filters"`
|
||||
Limit int `json:"limit"`
|
||||
Offset int `json:"offset"`
|
||||
}
|
||||
@@ -296,7 +296,7 @@ func handleKillmail(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
type analyticsQueryFunc func(db DB, req APIAnalyticsRequest) (interface{}, error)
|
||||
type analyticsQueryFunc func(database db.DB, req APIAnalyticsRequest) (interface{}, error)
|
||||
|
||||
func handleAnalyticsQuery(w http.ResponseWriter, r *http.Request, queryFn analyticsQueryFunc) {
|
||||
flog := logger.Default.WithPrefix("handleAnalyticsQuery")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package main
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
||||
@@ -3,40 +3,13 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"zkillsusser/types"
|
||||
)
|
||||
|
||||
// AnalyticsFilters represents the filter state for analytics queries
|
||||
type AnalyticsFilters struct {
|
||||
KillHour []uint8
|
||||
KillDayOfWeek []uint8
|
||||
KillDate []string
|
||||
Month []string
|
||||
SolarSystemID []int32
|
||||
RegionName []string
|
||||
ConstellationName []string
|
||||
SecurityStatus []string
|
||||
VictimShipTypeID []int32
|
||||
VictimShipGroupName []string
|
||||
VictimShipCategory []string
|
||||
VictimCharacterName []string
|
||||
VictimCorporation []string
|
||||
VictimAlliance []string
|
||||
AttackerShipType []string
|
||||
AttackerShipGroup []string
|
||||
AttackerCharacter []string
|
||||
AttackerCorporation []string
|
||||
AttackerAlliance []string
|
||||
SlotType []string
|
||||
HasModule *ModuleFilter
|
||||
}
|
||||
|
||||
type ModuleFilter struct {
|
||||
ModuleID int32
|
||||
}
|
||||
|
||||
type FlatKillmailComplete struct {
|
||||
FlatKillmail
|
||||
Items []FlatKillmailItem `json:"items"`
|
||||
types.FlatKillmail
|
||||
Items []types.FlatKillmailItem `json:"items"`
|
||||
}
|
||||
|
||||
// Time aggregation results
|
||||
@@ -188,7 +161,7 @@ type ModuleCoOccurrence struct {
|
||||
}
|
||||
|
||||
// buildWhereClause builds a WHERE clause from filters
|
||||
func buildWhereClause(filters AnalyticsFilters) (string, []interface{}) {
|
||||
func buildWhereClause(filters types.AnalyticsFilters) (string, []interface{}) {
|
||||
var conditions []string
|
||||
var args []interface{}
|
||||
|
||||
@@ -367,7 +340,7 @@ func buildWhereClause(filters AnalyticsFilters) (string, []interface{}) {
|
||||
}
|
||||
|
||||
// buildAttackerWhereClause builds WHERE clause for attacker queries
|
||||
func buildAttackerWhereClause(filters AnalyticsFilters) (string, []interface{}) {
|
||||
func buildAttackerWhereClause(filters types.AnalyticsFilters) (string, []interface{}) {
|
||||
var conditions []string
|
||||
var args []interface{}
|
||||
|
||||
@@ -435,7 +408,7 @@ func buildAttackerWhereClause(filters AnalyticsFilters) (string, []interface{})
|
||||
}
|
||||
|
||||
// getKillmailIDSubquery returns a subquery to filter by killmail_id from killmails table
|
||||
func getKillmailIDSubquery(filters AnalyticsFilters) (string, []interface{}) {
|
||||
func getKillmailIDSubquery(filters types.AnalyticsFilters) (string, []interface{}) {
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
if whereClause == "" {
|
||||
return "(SELECT killmail_id FROM zkill.killmails)", args
|
||||
|
||||
@@ -5,11 +5,18 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"zkillsusser/types"
|
||||
|
||||
"github.com/ClickHouse/clickhouse-go/v2/lib/driver"
|
||||
logger "git.site.quack-lab.dev/dave/cylogger"
|
||||
)
|
||||
|
||||
type DBWrapper struct {
|
||||
ch driver.Conn
|
||||
}
|
||||
|
||||
// Time aggregation queries
|
||||
func (db *DBWrapper) QueryTimeByHour(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByHour, error) {
|
||||
func (db *DBWrapper) QueryTimeByHour(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByHour, error) {
|
||||
flog := logger.Default.WithPrefix("QueryTimeByHour")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -43,7 +50,7 @@ func (db *DBWrapper) QueryTimeByHour(ctx context.Context, filters AnalyticsFilte
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryTimeByDay(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByDay, error) {
|
||||
func (db *DBWrapper) QueryTimeByDay(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByDay, error) {
|
||||
flog := logger.Default.WithPrefix("QueryTimeByDay")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -85,7 +92,7 @@ func (db *DBWrapper) QueryTimeByDay(ctx context.Context, filters AnalyticsFilter
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryTimeByDate(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByDate, error) {
|
||||
func (db *DBWrapper) QueryTimeByDate(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByDate, error) {
|
||||
flog := logger.Default.WithPrefix("QueryTimeByDate")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -119,7 +126,7 @@ func (db *DBWrapper) QueryTimeByDate(ctx context.Context, filters AnalyticsFilte
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryTimeByMonth(ctx context.Context, filters AnalyticsFilters) ([]TimeAggregationByMonth, error) {
|
||||
func (db *DBWrapper) QueryTimeByMonth(ctx context.Context, filters types.AnalyticsFilters) ([]TimeAggregationByMonth, error) {
|
||||
flog := logger.Default.WithPrefix("QueryTimeByMonth")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -153,7 +160,7 @@ func (db *DBWrapper) QueryTimeByMonth(ctx context.Context, filters AnalyticsFilt
|
||||
}
|
||||
|
||||
// Location aggregation queries
|
||||
func (db *DBWrapper) QueryLocationBySystem(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationBySystem, error) {
|
||||
func (db *DBWrapper) QueryLocationBySystem(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationBySystem, error) {
|
||||
flog := logger.Default.WithPrefix("QueryLocationBySystem")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -190,7 +197,7 @@ func (db *DBWrapper) QueryLocationBySystem(ctx context.Context, filters Analytic
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryLocationByRegion(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationByRegion, error) {
|
||||
func (db *DBWrapper) QueryLocationByRegion(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationByRegion, error) {
|
||||
flog := logger.Default.WithPrefix("QueryLocationByRegion")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -224,7 +231,7 @@ func (db *DBWrapper) QueryLocationByRegion(ctx context.Context, filters Analytic
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryLocationByConstellation(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationByConstellation, error) {
|
||||
func (db *DBWrapper) QueryLocationByConstellation(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationByConstellation, error) {
|
||||
flog := logger.Default.WithPrefix("QueryLocationByConstellation")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -258,7 +265,7 @@ func (db *DBWrapper) QueryLocationByConstellation(ctx context.Context, filters A
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryLocationBySecurity(ctx context.Context, filters AnalyticsFilters) ([]LocationAggregationBySecurity, error) {
|
||||
func (db *DBWrapper) QueryLocationBySecurity(ctx context.Context, filters types.AnalyticsFilters) ([]LocationAggregationBySecurity, error) {
|
||||
flog := logger.Default.WithPrefix("QueryLocationBySecurity")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -296,7 +303,7 @@ func (db *DBWrapper) QueryLocationBySecurity(ctx context.Context, filters Analyt
|
||||
}
|
||||
|
||||
// Ship aggregation queries
|
||||
func (db *DBWrapper) QueryShipByVictim(ctx context.Context, filters AnalyticsFilters) ([]ShipAggregationByVictimShip, error) {
|
||||
func (db *DBWrapper) QueryShipByVictim(ctx context.Context, filters types.AnalyticsFilters) ([]ShipAggregationByVictimShip, error) {
|
||||
flog := logger.Default.WithPrefix("QueryShipByVictim")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -332,7 +339,7 @@ func (db *DBWrapper) QueryShipByVictim(ctx context.Context, filters AnalyticsFil
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryShipByAttacker(ctx context.Context, filters AnalyticsFilters) ([]ShipAggregationByAttackerShip, error) {
|
||||
func (db *DBWrapper) QueryShipByAttacker(ctx context.Context, filters types.AnalyticsFilters) ([]ShipAggregationByAttackerShip, error) {
|
||||
flog := logger.Default.WithPrefix("QueryShipByAttacker")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
whereClause, whereArgs := buildAttackerWhereClause(filters)
|
||||
@@ -372,7 +379,7 @@ func (db *DBWrapper) QueryShipByAttacker(ctx context.Context, filters AnalyticsF
|
||||
}
|
||||
|
||||
// Player aggregation queries
|
||||
func (db *DBWrapper) QueryPlayerByVictimCharacter(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByVictimCharacter, error) {
|
||||
func (db *DBWrapper) QueryPlayerByVictimCharacter(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByVictimCharacter, error) {
|
||||
flog := logger.Default.WithPrefix("QueryPlayerByVictimCharacter")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -407,7 +414,7 @@ func (db *DBWrapper) QueryPlayerByVictimCharacter(ctx context.Context, filters A
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryPlayerByVictimCorporation(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByVictimCorporation, error) {
|
||||
func (db *DBWrapper) QueryPlayerByVictimCorporation(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByVictimCorporation, error) {
|
||||
flog := logger.Default.WithPrefix("QueryPlayerByVictimCorporation")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -441,7 +448,7 @@ func (db *DBWrapper) QueryPlayerByVictimCorporation(ctx context.Context, filters
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryPlayerByVictimAlliance(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByVictimAlliance, error) {
|
||||
func (db *DBWrapper) QueryPlayerByVictimAlliance(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByVictimAlliance, error) {
|
||||
flog := logger.Default.WithPrefix("QueryPlayerByVictimAlliance")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -482,7 +489,7 @@ func (db *DBWrapper) QueryPlayerByVictimAlliance(ctx context.Context, filters An
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryPlayerByAttackerCharacter(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByAttackerCharacter, error) {
|
||||
func (db *DBWrapper) QueryPlayerByAttackerCharacter(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByAttackerCharacter, error) {
|
||||
flog := logger.Default.WithPrefix("QueryPlayerByAttackerCharacter")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
whereClause, whereArgs := buildAttackerWhereClause(filters)
|
||||
@@ -521,7 +528,7 @@ func (db *DBWrapper) QueryPlayerByAttackerCharacter(ctx context.Context, filters
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryPlayerByAttackerCorporation(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByAttackerCorporation, error) {
|
||||
func (db *DBWrapper) QueryPlayerByAttackerCorporation(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByAttackerCorporation, error) {
|
||||
flog := logger.Default.WithPrefix("QueryPlayerByAttackerCorporation")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
whereClause, whereArgs := buildAttackerWhereClause(filters)
|
||||
@@ -558,7 +565,7 @@ func (db *DBWrapper) QueryPlayerByAttackerCorporation(ctx context.Context, filte
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryPlayerByAttackerAlliance(ctx context.Context, filters AnalyticsFilters) ([]PlayerAggregationByAttackerAlliance, error) {
|
||||
func (db *DBWrapper) QueryPlayerByAttackerAlliance(ctx context.Context, filters types.AnalyticsFilters) ([]PlayerAggregationByAttackerAlliance, error) {
|
||||
flog := logger.Default.WithPrefix("QueryPlayerByAttackerAlliance")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
whereClause, whereArgs := buildAttackerWhereClause(filters)
|
||||
@@ -596,7 +603,7 @@ func (db *DBWrapper) QueryPlayerByAttackerAlliance(ctx context.Context, filters
|
||||
}
|
||||
|
||||
// Module aggregation queries
|
||||
func (db *DBWrapper) QueryModuleBySlotType(ctx context.Context, filters AnalyticsFilters) ([]ModuleAggregationBySlotType, error) {
|
||||
func (db *DBWrapper) QueryModuleBySlotType(ctx context.Context, filters types.AnalyticsFilters) ([]ModuleAggregationBySlotType, error) {
|
||||
flog := logger.Default.WithPrefix("QueryModuleBySlotType")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
|
||||
@@ -645,7 +652,7 @@ func (db *DBWrapper) QueryModuleBySlotType(ctx context.Context, filters Analytic
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryModuleByModule(ctx context.Context, filters AnalyticsFilters) ([]ModuleAggregationByModule, error) {
|
||||
func (db *DBWrapper) QueryModuleByModule(ctx context.Context, filters types.AnalyticsFilters) ([]ModuleAggregationByModule, error) {
|
||||
flog := logger.Default.WithPrefix("QueryModuleByModule")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
|
||||
@@ -696,7 +703,7 @@ func (db *DBWrapper) QueryModuleByModule(ctx context.Context, filters AnalyticsF
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryModuleCoOccurrence(ctx context.Context, filters AnalyticsFilters, selectedModuleID int32, selectedSlot string) ([]ModuleCoOccurrence, error) {
|
||||
func (db *DBWrapper) QueryModuleCoOccurrence(ctx context.Context, filters types.AnalyticsFilters, selectedModuleID int32, selectedSlot string) ([]ModuleCoOccurrence, error) {
|
||||
flog := logger.Default.WithPrefix("QueryModuleCoOccurrence")
|
||||
killmailSubquery, killmailArgs := getKillmailIDSubquery(filters)
|
||||
|
||||
@@ -740,7 +747,7 @@ func (db *DBWrapper) QueryModuleCoOccurrence(ctx context.Context, filters Analyt
|
||||
return results, nil
|
||||
}
|
||||
|
||||
func (db *DBWrapper) QueryKillmailIDs(ctx context.Context, filters AnalyticsFilters, limit, offset int) ([]int64, error) {
|
||||
func (db *DBWrapper) QueryKillmailIDs(ctx context.Context, filters types.AnalyticsFilters, limit, offset int) ([]int64, error) {
|
||||
flog := logger.Default.WithPrefix("QueryKillmailIDs")
|
||||
whereClause, args := buildWhereClause(filters)
|
||||
|
||||
@@ -821,11 +828,11 @@ func (db *DBWrapper) QueryKillmailWithItems(ctx context.Context, killmailID int6
|
||||
defer rows.Close()
|
||||
|
||||
var result *FlatKillmailComplete
|
||||
var items []FlatKillmailItem
|
||||
var items []types.FlatKillmailItem
|
||||
|
||||
for rows.Next() {
|
||||
var km FlatKillmail
|
||||
var item FlatKillmailItem
|
||||
var km types.FlatKillmail
|
||||
var item types.FlatKillmailItem
|
||||
var itemTypeID int32
|
||||
var itemTypeName string
|
||||
var itemGroupName string
|
||||
@@ -876,7 +883,7 @@ func (db *DBWrapper) QueryKillmailWithItems(ctx context.Context, killmailID int6
|
||||
if result == nil {
|
||||
result = &FlatKillmailComplete{
|
||||
FlatKillmail: km,
|
||||
Items: []FlatKillmailItem{},
|
||||
Items: []types.FlatKillmailItem{},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ func TestQueryTimeByHour(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryTimeByHour(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -40,7 +40,7 @@ func TestQueryTimeByDay(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryTimeByDay(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -68,7 +68,7 @@ func TestQueryTimeByDate(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryTimeByDate(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -96,7 +96,7 @@ func TestQueryTimeByMonth(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryTimeByMonth(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -124,7 +124,7 @@ func TestQueryLocationBySystem(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryLocationBySystem(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -152,7 +152,7 @@ func TestQueryLocationByRegion(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryLocationByRegion(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -180,7 +180,7 @@ func TestQueryLocationByConstellation(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryLocationByConstellation(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -208,7 +208,7 @@ func TestQueryLocationBySecurity(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryLocationBySecurity(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -233,7 +233,7 @@ func TestQueryShipByVictim(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryShipByVictim(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -261,7 +261,7 @@ func TestQueryShipByAttacker(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryShipByAttacker(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -289,7 +289,7 @@ func TestQueryPlayerByVictimCharacter(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryPlayerByVictimCharacter(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -317,7 +317,7 @@ func TestQueryPlayerByVictimCorporation(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryPlayerByVictimCorporation(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -345,7 +345,7 @@ func TestQueryPlayerByVictimAlliance(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryPlayerByVictimAlliance(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -373,7 +373,7 @@ func TestQueryPlayerByAttackerCharacter(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryPlayerByAttackerCharacter(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -401,7 +401,7 @@ func TestQueryPlayerByAttackerCorporation(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryPlayerByAttackerCorporation(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -429,7 +429,7 @@ func TestQueryPlayerByAttackerAlliance(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryPlayerByAttackerAlliance(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -457,7 +457,7 @@ func TestQueryModuleBySlotType(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryModuleBySlotType(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -482,7 +482,7 @@ func TestQueryModuleByModule(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryModuleByModule(ctx, filters)
|
||||
if err != nil {
|
||||
@@ -510,7 +510,7 @@ func TestQueryModuleCoOccurrence(t *testing.T) {
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
filters := AnalyticsFilters{}
|
||||
filters := types.AnalyticsFilters{}
|
||||
|
||||
results, err := db.QueryModuleCoOccurrence(ctx, filters, 26914, "mid")
|
||||
if err != nil {
|
||||
|
||||
7
db/db.go
7
db/db.go
@@ -1,4 +1,4 @@
|
||||
package main
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"zkillsusser/models"
|
||||
"zkillsusser/types"
|
||||
|
||||
utils "git.site.quack-lab.dev/dave/cyutils"
|
||||
|
||||
@@ -20,7 +21,7 @@ type DB interface {
|
||||
Init() error
|
||||
Get() *gorm.DB
|
||||
|
||||
SaveFlatKillmails(killmails []*FlatKillmail, attackers []FlatKillmailAttacker, items []FlatKillmailItem) error
|
||||
SaveFlatKillmails(killmails []*types.FlatKillmail, attackers []types.FlatKillmailAttacker, items []types.FlatKillmailItem) error
|
||||
SearchShips(query string, limit int) ([]models.InvType, error)
|
||||
SearchSystems(query string, limit int) ([]models.MapSolarSystem, error)
|
||||
SearchModules(query string, limit int) ([]models.InvType, error)
|
||||
@@ -29,7 +30,7 @@ type DB interface {
|
||||
GetItemTypes(itemIDs []int64) ([]models.InvType, error)
|
||||
GetSolarSystems(systemIDs []int64) ([]models.MapSolarSystem, error)
|
||||
ExpandGroupsIntoItemTypeIds(groups []int64) ([]int64, error)
|
||||
GetModuleSlots(moduleIDs []int64) (map[int64]ModuleSlot, error)
|
||||
GetModuleSlots(moduleIDs []int64) (map[int64]types.ModuleSlot, error)
|
||||
|
||||
GetType(ctx context.Context, typeID int32) (*models.InvType, error)
|
||||
GetGroup(ctx context.Context, groupID int32) (*models.InvGroup, error)
|
||||
|
||||
3
main.go
3
main.go
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"zkillsusser/api"
|
||||
"zkillsusser/config"
|
||||
"zkillsusser/pipeline"
|
||||
|
||||
@@ -17,7 +18,7 @@ func main() {
|
||||
logger.Info("Starting")
|
||||
|
||||
if config.ServerMode {
|
||||
StartAPIServer(config.ServerPort)
|
||||
api.StartAPIServer(config.ServerPort)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -120,3 +120,31 @@ func derefInt64(i *int64) int64 {
|
||||
}
|
||||
return *i
|
||||
}
|
||||
|
||||
type ModuleFilter struct {
|
||||
ModuleID int32
|
||||
}
|
||||
|
||||
type AnalyticsFilters struct {
|
||||
KillHour []uint8
|
||||
KillDayOfWeek []uint8
|
||||
KillDate []string
|
||||
Month []string
|
||||
SolarSystemID []int32
|
||||
RegionName []string
|
||||
ConstellationName []string
|
||||
SecurityStatus []string
|
||||
VictimShipTypeID []int32
|
||||
VictimShipGroupName []string
|
||||
VictimShipCategory []string
|
||||
VictimCharacterName []string
|
||||
VictimCorporation []string
|
||||
VictimAlliance []string
|
||||
AttackerShipType []string
|
||||
AttackerShipGroup []string
|
||||
AttackerCharacter []string
|
||||
AttackerCorporation []string
|
||||
AttackerAlliance []string
|
||||
SlotType []string
|
||||
HasModule *ModuleFilter
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user