Disable debug, add stats, set content type on responses
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
3111c563f2
commit
eaf2a61714
25
main.go
25
main.go
|
@ -14,6 +14,7 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
@ -29,8 +30,16 @@ var (
|
||||||
client *http.Client
|
client *http.Client
|
||||||
|
|
||||||
jobChan = make(chan *Job)
|
jobChan = make(chan *Job)
|
||||||
|
|
||||||
|
jobCount int64
|
||||||
|
detectedCount int64
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type statsResponse struct {
|
||||||
|
Processed int64 `json:"jobsProcessed"`
|
||||||
|
Detected int64 `json:"detectionCount""`
|
||||||
|
}
|
||||||
|
|
||||||
type response struct {
|
type response struct {
|
||||||
Success bool `json:"success"`
|
Success bool `json:"success"`
|
||||||
Error error `json:"error,omitempty"`
|
Error error `json:"error,omitempty"`
|
||||||
|
@ -53,8 +62,6 @@ func main() {
|
||||||
Timeout: 15 * time.Second,
|
Timeout: 15 * time.Second,
|
||||||
}
|
}
|
||||||
|
|
||||||
log.SetLevel(log.DebugLevel)
|
|
||||||
|
|
||||||
c, err := yara.NewCompiler()
|
c, err := yara.NewCompiler()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -86,6 +93,7 @@ func main() {
|
||||||
|
|
||||||
r := chi.NewRouter()
|
r := chi.NewRouter()
|
||||||
|
|
||||||
|
r.Get("/stats", statsHandler)
|
||||||
r.Post("/scan", scanHandler)
|
r.Post("/scan", scanHandler)
|
||||||
|
|
||||||
bind := viper.GetString("bind")
|
bind := viper.GetString("bind")
|
||||||
|
@ -101,6 +109,11 @@ func main() {
|
||||||
<-ch
|
<-ch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func statsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
json.NewEncoder(w).Encode(statsResponse{Processed: atomic.LoadInt64(&jobCount), Detected: atomic.LoadInt64(&detectedCount)})
|
||||||
|
}
|
||||||
|
|
||||||
// HTTP handler for scanning files
|
// HTTP handler for scanning files
|
||||||
func scanHandler(w http.ResponseWriter, r *http.Request) {
|
func scanHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
contentType := r.Header.Get("Content-Type")
|
contentType := r.Header.Get("Content-Type")
|
||||||
|
@ -194,6 +207,8 @@ func scanHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
err := json.NewEncoder(w).Encode(res)
|
err := json.NewEncoder(w).Encode(res)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -273,6 +288,8 @@ func worker(rules *yara.Rules) {
|
||||||
func processJob(s *yara.Scanner, job *Job) {
|
func processJob(s *yara.Scanner, job *Job) {
|
||||||
m := make(yara.MatchRules, 0)
|
m := make(yara.MatchRules, 0)
|
||||||
|
|
||||||
|
atomic.AddInt64(&jobCount, 1)
|
||||||
|
|
||||||
defer job.Data.Close()
|
defer job.Data.Close()
|
||||||
|
|
||||||
b, err := io.ReadAll(job.Data)
|
b, err := io.ReadAll(job.Data)
|
||||||
|
@ -289,5 +306,9 @@ func processJob(s *yara.Scanner, job *Job) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(m) > 0 {
|
||||||
|
atomic.AddInt64(&detectedCount, 1)
|
||||||
|
}
|
||||||
|
|
||||||
job.Callback(m, nil)
|
job.Callback(m, nil)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue