60 lines
931 B
Go
60 lines
931 B
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
const (
|
|
filename = "mlijobs.txt"
|
|
inoutField = 1
|
|
timeField = 3
|
|
numFields = 7
|
|
)
|
|
|
|
func main() {
|
|
file, err := os.Open(filename)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer file.Close()
|
|
var ml, out int
|
|
var mlTimes []string
|
|
in := []byte("IN")
|
|
s := bufio.NewScanner(file)
|
|
for s.Scan() {
|
|
f := bytes.Fields(s.Bytes())
|
|
if len(f) != numFields {
|
|
log.Fatal("unexpected format,", len(f), "fields.")
|
|
}
|
|
if bytes.Equal(f[inoutField], in) {
|
|
out--
|
|
if out < 0 {
|
|
log.Fatalf("negative license use at %s", f[timeField])
|
|
}
|
|
continue
|
|
}
|
|
out++
|
|
if out < ml {
|
|
continue
|
|
}
|
|
|
|
if out > ml {
|
|
ml = out
|
|
mlTimes = mlTimes[:0]
|
|
}
|
|
mlTimes = append(mlTimes, string(f[timeField]))
|
|
}
|
|
if err = s.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
fmt.Println("max licenses:", ml)
|
|
fmt.Println("at:")
|
|
for _, t := range mlTimes {
|
|
fmt.Println(" ", t)
|
|
}
|
|
}
|