noop code removal, typos and lint fixes (#1329)
This commit is contained in:
parent
59ad91a8ca
commit
7c0593c659
|
@ -50,16 +50,13 @@ func AlertsToTable(alerts *models.GetAlertsResponse, printMachine bool) error {
|
||||||
|
|
||||||
if csConfig.Cscli.Output == "raw" {
|
if csConfig.Cscli.Output == "raw" {
|
||||||
csvwriter := csv.NewWriter(os.Stdout)
|
csvwriter := csv.NewWriter(os.Stdout)
|
||||||
|
header := []string{"id", "scope", "value", "reason", "country", "as", "decisions", "created_at"}
|
||||||
if printMachine {
|
if printMachine {
|
||||||
err := csvwriter.Write([]string{"id", "scope", "value", "reason", "country", "as", "decisions", "created_at", "machine"})
|
header = append(header, "machine")
|
||||||
if err != nil {
|
}
|
||||||
return err
|
err := csvwriter.Write(header)
|
||||||
}
|
if err != nil {
|
||||||
} else {
|
return err
|
||||||
err := csvwriter.Write([]string{"id", "scope", "value", "reason", "country", "as", "decisions", "created_at"})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for _, alertItem := range *alerts {
|
for _, alertItem := range *alerts {
|
||||||
row := []string{
|
row := []string{
|
||||||
|
@ -87,11 +84,11 @@ func AlertsToTable(alerts *models.GetAlertsResponse, printMachine bool) error {
|
||||||
} else if csConfig.Cscli.Output == "human" {
|
} else if csConfig.Cscli.Output == "human" {
|
||||||
|
|
||||||
table := tablewriter.NewWriter(os.Stdout)
|
table := tablewriter.NewWriter(os.Stdout)
|
||||||
|
header := []string{"ID", "value", "reason", "country", "as", "decisions", "created_at"}
|
||||||
if printMachine {
|
if printMachine {
|
||||||
table.SetHeader([]string{"ID", "value", "reason", "country", "as", "decisions", "created_at", "machine"})
|
header = append(header, "machine")
|
||||||
} else {
|
|
||||||
table.SetHeader([]string{"ID", "value", "reason", "country", "as", "decisions", "created_at"})
|
|
||||||
}
|
}
|
||||||
|
table.SetHeader(header)
|
||||||
|
|
||||||
if len(*alerts) == 0 {
|
if len(*alerts) == 0 {
|
||||||
fmt.Println("No active alerts")
|
fmt.Println("No active alerts")
|
||||||
|
@ -103,28 +100,19 @@ func AlertsToTable(alerts *models.GetAlertsResponse, printMachine bool) error {
|
||||||
if *alertItem.Source.Value != "" {
|
if *alertItem.Source.Value != "" {
|
||||||
displayVal += ":" + *alertItem.Source.Value
|
displayVal += ":" + *alertItem.Source.Value
|
||||||
}
|
}
|
||||||
if printMachine {
|
row := []string{
|
||||||
table.Append([]string{
|
strconv.Itoa(int(alertItem.ID)),
|
||||||
strconv.Itoa(int(alertItem.ID)),
|
displayVal,
|
||||||
displayVal,
|
*alertItem.Scenario,
|
||||||
*alertItem.Scenario,
|
alertItem.Source.Cn,
|
||||||
alertItem.Source.Cn,
|
alertItem.Source.AsNumber + " " + alertItem.Source.AsName,
|
||||||
alertItem.Source.AsNumber + " " + alertItem.Source.AsName,
|
DecisionsFromAlert(alertItem),
|
||||||
DecisionsFromAlert(alertItem),
|
*alertItem.StartAt,
|
||||||
*alertItem.StartAt,
|
|
||||||
alertItem.MachineID,
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
table.Append([]string{
|
|
||||||
strconv.Itoa(int(alertItem.ID)),
|
|
||||||
displayVal,
|
|
||||||
*alertItem.Scenario,
|
|
||||||
alertItem.Source.Cn,
|
|
||||||
alertItem.Source.AsNumber + " " + alertItem.Source.AsName,
|
|
||||||
DecisionsFromAlert(alertItem),
|
|
||||||
*alertItem.StartAt,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
if printMachine {
|
||||||
|
row = append(row, alertItem.MachineID)
|
||||||
|
}
|
||||||
|
table.Append(row)
|
||||||
}
|
}
|
||||||
table.Render() // Send output
|
table.Render() // Send output
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,9 +68,9 @@ Note: This command requires database direct access, so is intended to be run on
|
||||||
for _, b := range blockers {
|
for _, b := range blockers {
|
||||||
var revoked string
|
var revoked string
|
||||||
if !b.Revoked {
|
if !b.Revoked {
|
||||||
revoked = fmt.Sprintf("%s", emoji.CheckMark)
|
revoked = emoji.CheckMark.String()
|
||||||
} else {
|
} else {
|
||||||
revoked = fmt.Sprintf("%s", emoji.Prohibited)
|
revoked = emoji.Prohibited.String()
|
||||||
}
|
}
|
||||||
table.Append([]string{b.Name, b.IPAddress, revoked, b.LastPull.Format(time.RFC3339), b.Type, b.Version})
|
table.Append([]string{b.Name, b.IPAddress, revoked, b.LastPull.Format(time.RFC3339), b.Type, b.Version})
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,6 @@ Enable given information push to the central API. Allows to empower the console`
|
||||||
if enableAll {
|
if enableAll {
|
||||||
SetConsoleOpts(csconfig.CONSOLE_CONFIGS, true)
|
SetConsoleOpts(csconfig.CONSOLE_CONFIGS, true)
|
||||||
log.Infof("All features have been enabled successfully")
|
log.Infof("All features have been enabled successfully")
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
log.Fatalf("You must specify at least one feature to enable")
|
log.Fatalf("You must specify at least one feature to enable")
|
||||||
|
|
|
@ -82,7 +82,6 @@ func DecisionsToTable(alerts *models.GetAlertsResponse) error {
|
||||||
x, _ := json.MarshalIndent(alerts, "", " ")
|
x, _ := json.MarshalIndent(alerts, "", " ")
|
||||||
fmt.Printf("%s", string(x))
|
fmt.Printf("%s", string(x))
|
||||||
} else if csConfig.Cscli.Output == "human" {
|
} else if csConfig.Cscli.Output == "human" {
|
||||||
|
|
||||||
table := tablewriter.NewWriter(os.Stdout)
|
table := tablewriter.NewWriter(os.Stdout)
|
||||||
table.SetHeader([]string{"ID", "Source", "Scope:Value", "Reason", "Action", "Country", "AS", "Events", "expiration", "Alert ID"})
|
table.SetHeader([]string{"ID", "Source", "Scope:Value", "Reason", "Action", "Country", "AS", "Events", "expiration", "Alert ID"})
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ cscli hubtest create my-scenario-test --parsers crowdsecurity/nginx --scenarios
|
||||||
}
|
}
|
||||||
|
|
||||||
if logType == "" {
|
if logType == "" {
|
||||||
log.Fatalf("please provid a type (--type) for the test")
|
log.Fatalf("please provide a type (--type) for the test")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.MkdirAll(testPath, os.ModePerm); err != nil {
|
if err := os.MkdirAll(testPath, os.ModePerm); err != nil {
|
||||||
|
|
|
@ -131,9 +131,9 @@ Note: This command requires database direct access, so is intended to be run on
|
||||||
for _, w := range machines {
|
for _, w := range machines {
|
||||||
var validated string
|
var validated string
|
||||||
if w.IsValidated {
|
if w.IsValidated {
|
||||||
validated = fmt.Sprintf("%s", emoji.CheckMark)
|
validated = emoji.CheckMark.String()
|
||||||
} else {
|
} else {
|
||||||
validated = fmt.Sprintf("%s", emoji.Prohibited)
|
validated = emoji.Prohibited.String()
|
||||||
}
|
}
|
||||||
table.Append([]string{w.MachineId, w.IpAddress, w.UpdatedAt.Format(time.RFC3339), validated, w.Version})
|
table.Append([]string{w.MachineId, w.IpAddress, w.UpdatedAt.Format(time.RFC3339), validated, w.Version})
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,12 +106,11 @@ func ListItems(itemTypes []string, args []string, showType bool, showHeader bool
|
||||||
var hubStatusByItemType = make(map[string][]cwhub.ItemHubStatus)
|
var hubStatusByItemType = make(map[string][]cwhub.ItemHubStatus)
|
||||||
|
|
||||||
for _, itemType := range itemTypes {
|
for _, itemType := range itemTypes {
|
||||||
|
itemName := ""
|
||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
// This means that user requested a specific item by name
|
itemName = args[0]
|
||||||
hubStatusByItemType[itemType] = cwhub.GetHubStatusForItemType(itemType, args[0], all)
|
|
||||||
} else {
|
|
||||||
hubStatusByItemType[itemType] = cwhub.GetHubStatusForItemType(itemType, "", all)
|
|
||||||
}
|
}
|
||||||
|
hubStatusByItemType[itemType] = cwhub.GetHubStatusForItemType(itemType, itemName, all)
|
||||||
}
|
}
|
||||||
|
|
||||||
if csConfig.Cscli.Output == "human" {
|
if csConfig.Cscli.Output == "human" {
|
||||||
|
@ -137,16 +136,13 @@ func ListItems(itemTypes []string, args []string, showType bool, showHeader bool
|
||||||
} else if csConfig.Cscli.Output == "raw" {
|
} else if csConfig.Cscli.Output == "raw" {
|
||||||
csvwriter := csv.NewWriter(os.Stdout)
|
csvwriter := csv.NewWriter(os.Stdout)
|
||||||
if showHeader {
|
if showHeader {
|
||||||
|
header := []string{"name", "status", "version", "description"}
|
||||||
if showType {
|
if showType {
|
||||||
err := csvwriter.Write([]string{"name", "status", "version", "description", "type"})
|
header = append(header, "type")
|
||||||
if err != nil {
|
}
|
||||||
log.Fatalf("failed to write header: %s", err)
|
err := csvwriter.Write(header)
|
||||||
}
|
if err != nil {
|
||||||
} else {
|
log.Fatalf("failed to write header: %s", err)
|
||||||
err := csvwriter.Write([]string{"name", "status", "version", "description"})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to write header: %s", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -685,57 +681,56 @@ func BackupHub(dirPath string) error {
|
||||||
"type": itemType,
|
"type": itemType,
|
||||||
})
|
})
|
||||||
itemMap := cwhub.GetItemMap(itemType)
|
itemMap := cwhub.GetItemMap(itemType)
|
||||||
if itemMap != nil {
|
if itemMap == nil {
|
||||||
itemDirectory = fmt.Sprintf("%s/%s/", dirPath, itemType)
|
|
||||||
if err := os.MkdirAll(itemDirectory, os.ModePerm); err != nil {
|
|
||||||
return fmt.Errorf("error while creating %s : %s", itemDirectory, err)
|
|
||||||
}
|
|
||||||
upstreamParsers = []string{}
|
|
||||||
for k, v := range itemMap {
|
|
||||||
clog = clog.WithFields(log.Fields{
|
|
||||||
"file": v.Name,
|
|
||||||
})
|
|
||||||
if !v.Installed { //only backup installed ones
|
|
||||||
clog.Debugf("[%s] : not installed", k)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
//for the local/tainted ones, we backup the full file
|
|
||||||
if v.Tainted || v.Local || !v.UpToDate {
|
|
||||||
//we need to backup stages for parsers
|
|
||||||
if itemType == cwhub.PARSERS || itemType == cwhub.PARSERS_OVFLW {
|
|
||||||
fstagedir := fmt.Sprintf("%s%s", itemDirectory, v.Stage)
|
|
||||||
if err := os.MkdirAll(fstagedir, os.ModePerm); err != nil {
|
|
||||||
return fmt.Errorf("error while creating stage dir %s : %s", fstagedir, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
clog.Debugf("[%s] : backuping file (tainted:%t local:%t up-to-date:%t)", k, v.Tainted, v.Local, v.UpToDate)
|
|
||||||
tfile := fmt.Sprintf("%s%s/%s", itemDirectory, v.Stage, v.FileName)
|
|
||||||
if err = types.CopyFile(v.LocalPath, tfile); err != nil {
|
|
||||||
return fmt.Errorf("failed copy %s %s to %s : %s", itemType, v.LocalPath, tfile, err)
|
|
||||||
}
|
|
||||||
clog.Infof("local/tainted saved %s to %s", v.LocalPath, tfile)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
clog.Debugf("[%s] : from hub, just backup name (up-to-date:%t)", k, v.UpToDate)
|
|
||||||
clog.Infof("saving, version:%s, up-to-date:%t", v.Version, v.UpToDate)
|
|
||||||
upstreamParsers = append(upstreamParsers, v.Name)
|
|
||||||
}
|
|
||||||
//write the upstream items
|
|
||||||
upstreamParsersFname := fmt.Sprintf("%s/upstream-%s.json", itemDirectory, itemType)
|
|
||||||
upstreamParsersContent, err := json.MarshalIndent(upstreamParsers, "", " ")
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed marshaling upstream parsers : %s", err)
|
|
||||||
}
|
|
||||||
err = ioutil.WriteFile(upstreamParsersFname, upstreamParsersContent, 0644)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("unable to write to %s %s : %s", itemType, upstreamParsersFname, err)
|
|
||||||
}
|
|
||||||
clog.Infof("Wrote %d entries for %s to %s", len(upstreamParsers), itemType, upstreamParsersFname)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
clog.Infof("No %s to backup.", itemType)
|
clog.Infof("No %s to backup.", itemType)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
itemDirectory = fmt.Sprintf("%s/%s/", dirPath, itemType)
|
||||||
|
if err := os.MkdirAll(itemDirectory, os.ModePerm); err != nil {
|
||||||
|
return fmt.Errorf("error while creating %s : %s", itemDirectory, err)
|
||||||
|
}
|
||||||
|
upstreamParsers = []string{}
|
||||||
|
for k, v := range itemMap {
|
||||||
|
clog = clog.WithFields(log.Fields{
|
||||||
|
"file": v.Name,
|
||||||
|
})
|
||||||
|
if !v.Installed { //only backup installed ones
|
||||||
|
clog.Debugf("[%s] : not installed", k)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
//for the local/tainted ones, we backup the full file
|
||||||
|
if v.Tainted || v.Local || !v.UpToDate {
|
||||||
|
//we need to backup stages for parsers
|
||||||
|
if itemType == cwhub.PARSERS || itemType == cwhub.PARSERS_OVFLW {
|
||||||
|
fstagedir := fmt.Sprintf("%s%s", itemDirectory, v.Stage)
|
||||||
|
if err := os.MkdirAll(fstagedir, os.ModePerm); err != nil {
|
||||||
|
return fmt.Errorf("error while creating stage dir %s : %s", fstagedir, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clog.Debugf("[%s] : backuping file (tainted:%t local:%t up-to-date:%t)", k, v.Tainted, v.Local, v.UpToDate)
|
||||||
|
tfile := fmt.Sprintf("%s%s/%s", itemDirectory, v.Stage, v.FileName)
|
||||||
|
if err = types.CopyFile(v.LocalPath, tfile); err != nil {
|
||||||
|
return fmt.Errorf("failed copy %s %s to %s : %s", itemType, v.LocalPath, tfile, err)
|
||||||
|
}
|
||||||
|
clog.Infof("local/tainted saved %s to %s", v.LocalPath, tfile)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
clog.Debugf("[%s] : from hub, just backup name (up-to-date:%t)", k, v.UpToDate)
|
||||||
|
clog.Infof("saving, version:%s, up-to-date:%t", v.Version, v.UpToDate)
|
||||||
|
upstreamParsers = append(upstreamParsers, v.Name)
|
||||||
|
}
|
||||||
|
//write the upstream items
|
||||||
|
upstreamParsersFname := fmt.Sprintf("%s/upstream-%s.json", itemDirectory, itemType)
|
||||||
|
upstreamParsersContent, err := json.MarshalIndent(upstreamParsers, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed marshaling upstream parsers : %s", err)
|
||||||
|
}
|
||||||
|
err = ioutil.WriteFile(upstreamParsersFname, upstreamParsersContent, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to write to %s %s : %s", itemType, upstreamParsersFname, err)
|
||||||
|
}
|
||||||
|
clog.Infof("Wrote %d entries for %s to %s", len(upstreamParsers), itemType, upstreamParsersFname)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
func bToMb(b uint64) uint64 {
|
|
||||||
return b / 1024 / 1024
|
|
||||||
}
|
|
|
@ -193,7 +193,6 @@ func (c *Controller) CreateAlert(gctx *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
gctx.JSON(http.StatusCreated, alerts)
|
gctx.JSON(http.StatusCreated, alerts)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindAlerts : return alerts from database based on the specified filter
|
// FindAlerts : return alerts from database based on the specified filter
|
||||||
|
@ -211,7 +210,6 @@ func (c *Controller) FindAlerts(gctx *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
gctx.JSON(http.StatusOK, data)
|
gctx.JSON(http.StatusOK, data)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindAlertByID return the alert assiocated to the ID
|
// FindAlertByID return the alert assiocated to the ID
|
||||||
|
@ -234,7 +232,6 @@ func (c *Controller) FindAlertByID(gctx *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
gctx.JSON(http.StatusOK, data)
|
gctx.JSON(http.StatusOK, data)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteAlerts : delete alerts from database based on the specified filter
|
// DeleteAlerts : delete alerts from database based on the specified filter
|
||||||
|
@ -254,5 +251,4 @@ func (c *Controller) DeleteAlerts(gctx *gin.Context) {
|
||||||
NbDeleted: strconv.Itoa(nbDeleted),
|
NbDeleted: strconv.Itoa(nbDeleted),
|
||||||
}
|
}
|
||||||
gctx.JSON(http.StatusOK, deleteAlertsResp)
|
gctx.JSON(http.StatusOK, deleteAlertsResp)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,6 @@ func (c *Controller) GetDecision(gctx *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
gctx.JSON(http.StatusOK, results)
|
gctx.JSON(http.StatusOK, results)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Controller) DeleteDecisionById(gctx *gin.Context) {
|
func (c *Controller) DeleteDecisionById(gctx *gin.Context) {
|
||||||
|
|
|
@ -210,7 +210,7 @@ func (s *ScenarioAssert) AutoGenScenarioAssert() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret += fmt.Sprintf(`results[%d].Overflow.Alert.GetScenario() == "%s"`+"\n", eventIndex, *event.Overflow.Alert.Scenario)
|
ret += fmt.Sprintf(`results[%d].Overflow.Alert.GetScenario() == "%s"`+"\n", eventIndex, *event.Overflow.Alert.Scenario)
|
||||||
ret += fmt.Sprintf(`results[%d].Overflow.Alert.Remediation == %t`+"\n", eventIndex, *&event.Overflow.Alert.Remediation)
|
ret += fmt.Sprintf(`results[%d].Overflow.Alert.Remediation == %t`+"\n", eventIndex, event.Overflow.Alert.Remediation)
|
||||||
ret += fmt.Sprintf(`results[%d].Overflow.Alert.GetEventsCount() == %d`+"\n", eventIndex, *event.Overflow.Alert.EventsCount)
|
ret += fmt.Sprintf(`results[%d].Overflow.Alert.GetEventsCount() == %d`+"\n", eventIndex, *event.Overflow.Alert.EventsCount)
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
|
|
|
@ -93,7 +93,7 @@ func TestGetters(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//Get item : good and bad
|
//Get item : good and bad
|
||||||
for k, _ := range x {
|
for k := range x {
|
||||||
empty := GetItem(COLLECTIONS, k+"nope")
|
empty := GetItem(COLLECTIONS, k+"nope")
|
||||||
if empty != nil {
|
if empty != nil {
|
||||||
t.Fatalf("expected empty item")
|
t.Fatalf("expected empty item")
|
||||||
|
@ -198,7 +198,7 @@ func testInstallItem(cfg *csconfig.Hub, t *testing.T, item Item) {
|
||||||
t.Fatalf("download: %s should be up-to-date", item.Name)
|
t.Fatalf("download: %s should be up-to-date", item.Name)
|
||||||
}
|
}
|
||||||
if hubIdx[item.Type][item.Name].Installed {
|
if hubIdx[item.Type][item.Name].Installed {
|
||||||
t.Fatalf("download: %s should not be install", item.Name)
|
t.Fatalf("download: %s should not be installed", item.Name)
|
||||||
}
|
}
|
||||||
if hubIdx[item.Type][item.Name].Tainted {
|
if hubIdx[item.Type][item.Name].Tainted {
|
||||||
t.Fatalf("download: %s should not be tainted", item.Name)
|
t.Fatalf("download: %s should not be tainted", item.Name)
|
||||||
|
@ -212,7 +212,7 @@ func testInstallItem(cfg *csconfig.Hub, t *testing.T, item Item) {
|
||||||
t.Fatalf("taint: failed to run localSync : %s", err)
|
t.Fatalf("taint: failed to run localSync : %s", err)
|
||||||
}
|
}
|
||||||
if !hubIdx[item.Type][item.Name].Installed {
|
if !hubIdx[item.Type][item.Name].Installed {
|
||||||
t.Fatalf("install: %s should be install", item.Name)
|
t.Fatalf("install: %s should be installed", item.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -849,6 +849,9 @@ func (c *Client) DeleteAlertWithFilter(filter map[string][]string) (int, error)
|
||||||
|
|
||||||
// Get all the alerts that match the filter
|
// Get all the alerts that match the filter
|
||||||
alertsToDelete, err := c.QueryAlertWithFilter(filter)
|
alertsToDelete, err := c.QueryAlertWithFilter(filter)
|
||||||
|
if err != nil {
|
||||||
|
return 0, errors.Wrap(DeleteFail, "alert query failed")
|
||||||
|
}
|
||||||
|
|
||||||
for _, alertItem := range alertsToDelete {
|
for _, alertItem := range alertsToDelete {
|
||||||
err = c.DeleteAlertGraph(alertItem)
|
err = c.DeleteAlertGraph(alertItem)
|
||||||
|
|
|
@ -279,17 +279,16 @@ func NewAlert(leaky *Leaky, queue *Queue) (types.RuntimeAlert, error) {
|
||||||
}
|
}
|
||||||
runtimeAlert.Sources = sources
|
runtimeAlert.Sources = sources
|
||||||
//Include source info in format string
|
//Include source info in format string
|
||||||
sourceStr := ""
|
sourceStr := "UNKNOWN"
|
||||||
if len(sources) > 1 {
|
if len(sources) > 1 {
|
||||||
sourceStr = fmt.Sprintf("%d sources", len(sources))
|
sourceStr = fmt.Sprintf("%d sources", len(sources))
|
||||||
} else if len(sources) == 1 {
|
} else if len(sources) == 1 {
|
||||||
for k, _ := range sources {
|
for k := range sources {
|
||||||
sourceStr = k
|
sourceStr = k
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
sourceStr = "UNKNOWN"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*apiAlert.Message = fmt.Sprintf("%s %s performed '%s' (%d events over %s) at %s", source_scope, sourceStr, leaky.Name, leaky.Total_count, leaky.Ovflw_ts.Sub(leaky.First_ts), leaky.Last_ts)
|
*apiAlert.Message = fmt.Sprintf("%s %s performed '%s' (%d events over %s) at %s", source_scope, sourceStr, leaky.Name, leaky.Total_count, leaky.Ovflw_ts.Sub(leaky.First_ts), leaky.Last_ts)
|
||||||
//Get the events from Leaky/Queue
|
//Get the events from Leaky/Queue
|
||||||
apiAlert.Events = EventsFromQueue(queue)
|
apiAlert.Events = EventsFromQueue(queue)
|
||||||
|
|
|
@ -155,7 +155,7 @@ func (n *Node) process(p *types.Event, ctx UnixParserCtx) (bool, error) {
|
||||||
srcs = append(srcs, net.ParseIP(p.Meta["source_ip"]))
|
srcs = append(srcs, net.ParseIP(p.Meta["source_ip"]))
|
||||||
}
|
}
|
||||||
} else if p.Type == types.OVFLW {
|
} else if p.Type == types.OVFLW {
|
||||||
for k, _ := range p.Overflow.Sources {
|
for k := range p.Overflow.Sources {
|
||||||
srcs = append(srcs, net.ParseIP(k))
|
srcs = append(srcs, net.ParseIP(k))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ declare stderr
|
||||||
assert_output --partial "Constraint_acquis:"
|
assert_output --partial "Constraint_acquis:"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE cscli alerts list: at startup returns one entry: community pull" {
|
@test "$FILE cscli alerts list: at startup returns at least one entry: community pull" {
|
||||||
loop_max=15
|
loop_max=15
|
||||||
for ((i=0; i<=loop_max; i++)); do
|
for ((i=0; i<=loop_max; i++)); do
|
||||||
sleep 2
|
sleep 2
|
||||||
|
@ -47,7 +47,7 @@ declare stderr
|
||||||
[[ "$output" != "null" ]] && break
|
[[ "$output" != "null" ]] && break
|
||||||
done
|
done
|
||||||
run -0 jq -r '. | length' <(output)
|
run -0 jq -r '. | length' <(output)
|
||||||
assert_output 1
|
refute_output 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE cscli capi status" {
|
@test "$FILE cscli capi status" {
|
||||||
|
|
40
tests/bats/80_alerts.bats
Normal file
40
tests/bats/80_alerts.bats
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env bats
|
||||||
|
# vim: ft=bats:list:ts=8:sts=4:sw=4:et:ai:si:
|
||||||
|
|
||||||
|
set -u
|
||||||
|
|
||||||
|
setup_file() {
|
||||||
|
load "../lib/setup_file.sh" >&3 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
teardown_file() {
|
||||||
|
load "../lib/teardown_file.sh" >&3 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
load "../lib/setup.sh"
|
||||||
|
./instance-data load
|
||||||
|
./instance-crowdsec start
|
||||||
|
}
|
||||||
|
|
||||||
|
teardown() {
|
||||||
|
./instance-crowdsec stop
|
||||||
|
}
|
||||||
|
|
||||||
|
#----------
|
||||||
|
|
||||||
|
@test "$FILE cscli alerts list, with and without --machine" {
|
||||||
|
run -0 cscli decisions add -i 10.20.30.40 -t ban
|
||||||
|
|
||||||
|
run -0 cscli alerts list
|
||||||
|
refute_output --partial 'MACHINE'
|
||||||
|
# machine name appears quoted in the "REASON" column
|
||||||
|
assert_output --partial "| 'githubciXXXXXXXXXXXXXXXXXXXXXXXX' |"
|
||||||
|
refute_output --partial "| githubciXXXXXXXXXXXXXXXXXXXXXXXX |"
|
||||||
|
|
||||||
|
run -0 cscli alerts list --machine
|
||||||
|
assert_output --partial 'MACHINE'
|
||||||
|
assert_output --partial "| 'githubciXXXXXXXXXXXXXXXXXXXXXXXX' |"
|
||||||
|
assert_output --partial "| githubciXXXXXXXXXXXXXXXXXXXXXXXX |"
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue