aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSina Ghaderi <32870524+Sina-Ghaderi@users.noreply.github.com>2020-08-12 03:19:07 +0430
committerGitHub <noreply@github.com>2020-08-12 03:19:07 +0430
commit9b77d5ca3284cf84a7ca25afb09f506d1f19f895 (patch)
treeae6956357897d7eacc5c34bb0c7cd2c77639390e
parentd084e535c6180106a475bc171ded4f775a2578d3 (diff)
Performance And Sorting in Files.Go
-rw-r--r--files.go65
1 files changed, 50 insertions, 15 deletions
diff --git a/files.go b/files.go
index def0761..f489c16 100644
--- a/files.go
+++ b/files.go
@@ -4,34 +4,69 @@ import (
"fmt"
"log"
"os"
+ "sort"
+ "strconv"
+ "time"
)
+type entry struct /* sorting datausage */ {
+ key string
+ value datausage
+}
+type byPriority []entry
+
+func (d byPriority) Len() int { return len(d) }
+func (d byPriority) Less(i, j int) bool {
+ // sort by rx or tx ?
+ if *srtx == "RX" {
+ return d[i].value.rx < d[j].value.rx
+ }
+ return d[i].value.tx < d[j].value.tx
+}
+func (d byPriority) Swap(i, j int) { d[i], d[j] = d[j], d[i] }
+
+func saveTOdatabases(dnm string) /*save captured data to file and database */ {
+ dbx := initDB(dnm) // connect to database
+ defer dbx.Close()
+ createTable(dbx) // create tb if not exist
+ storeItem(dbx, nmap) // save to db
+ if *svtf != "false" {
+ saveTOfile(*svtf, readItem(dbx)) // save to file or not ?
+ }
+ nmap = make(map[string]datausage) // flushing ...
+}
+
func saveTOfile(filename string, data map[string]datausage) {
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
if err != nil {
log.Fatal(err)
}
- if _, err := fmt.Fprintln(f, "SrcIP Address\t\tRX\t\tTX"); err != nil {
+ var maxLenrx int
+ slice := make(byPriority, 0, len(data))
+ for key, value := range data {
+ slice = append(slice, entry{key, value})
+ if len(strconv.FormatUint(uint64(value.rx), 10)) > maxLenrx {
+ maxLenrx = len(strconv.FormatUint(uint64(value.rx), 10))
+ }
+ }
+ // printing header to file
+ if _, err := fmt.Fprintf(f, "Go-IPFM 0.34 - Capturing Data On %v - Time: %v\n%-28v %-*v %v(%s)\n", *infc, time.Now().Format("2006-01-02 15:04:05"), "Source-IPV4-Add", maxLenrx+12, "RX("+*trm+")", "TX", *trm); err != nil {
log.Fatal(err)
}
- for _, v := range data {
- if _, err = fmt.Fprintf(f, "%v\t\t%v\t\t%v\n", v.ip, v.rx, v.tx); err != nil {
- f.Close()
+ // sorting data usage
+ if *srfm == "descending" {
+ sort.Sort(sort.Reverse(slice))
+ } else {
+ sort.Sort(slice)
+ }
+
+ for _, v := range slice { /*save sorted data to file ...*/
+ if _, err = fmt.Fprintf(f, "%-28v %-*.3f %.3f\n", v.value.ip, maxLenrx+12, float64(v.value.rx)/float64(cHz), float64(v.value.tx)/float64(cHz)); err != nil {
log.Fatal(err)
}
+ // fmt.Println(cHz)
}
if err = f.Close(); err != nil {
log.Fatal(err)
}
}
-
-func saveTOdatabases(dnm string) {
- dbx := initDB(dnm)
- defer dbx.Close()
- createTable(dbx)
- storeItem(dbx, nmap)
- if *svtf != "false" {
- saveTOfile(*svtf, readItem(dbx))
- }
- nmap = make(map[string]datausage)
-}

Snix LLC Git Repository Holder Copyright(C) 2022 All Rights Reserved Email To Snix.IR