Skip to content

Commit

Permalink
second intermediate revision - refactored and simplified
Browse files Browse the repository at this point in the history
  • Loading branch information
amsokol committed Oct 3, 2017
1 parent d7dc077 commit 7e5aede
Show file tree
Hide file tree
Showing 17 changed files with 322 additions and 566 deletions.
1 change: 1 addition & 0 deletions .idea/dictionaries/amsokol.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 39 additions & 25 deletions cmd/example-get-all-messages-from-file/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,57 +10,71 @@ import (
"github.com/pkg/errors"

"github.com/BCM-ENERGY-team/go-eccodes"
cio "github.com/BCM-ENERGY-team/go-eccodes/io"
)

func main() {
filename := flag.String("file", "", "file path, e.g. /tmp/ARPEGE_0.1_SP1_00H12H_201709290000.grib2")
filename := flag.String("file", "", "io path, e.g. /tmp/ARPEGE_0.1_SP1_00H12H_201709290000.grib2")

flag.Parse()

index, err := codes.NewIndex(nil, *filename, "r", nil)
f, err := cio.OpenFile(*filename, "r")
if err != nil {
log.Fatalf("failed to create index for file: %s", err.Error())
log.Fatalf("failed to open file on file system: %s", err.Error())
}
defer index.Close()
defer f.Close()

file, err := codes.OpenFile(f)
if err != nil {
log.Fatalf("failed to open file: %s", err.Error())
}
defer file.Close()

n := 0
for {
start := time.Now()

msg, err := next(index)
err = process(file, n)
if err != nil {
if err == io.EOF {
break
}
log.Fatalf("failed to get message (#%d) from index: %s", n, err.Error())
}
n++
}
}

log.Printf("============= BEGIN MESSAGE N%d ==========\n", n)

shortName, _ := msg.Parameters()["shortName"]
name, _ := msg.Parameters()["name"]
func process(file codes.File, n int) error {
start := time.Now()

log.Printf("Variable = [%s](%s)\n", shortName, name)
msg, err := file.Next()
if err != nil {
return err
}
defer msg.Close()

log.Printf("elapsed=%f seconds", time.Since(start).Seconds())
log.Printf("============= END MESSAGE N%d ============\n\n", n)
n++
log.Printf("============= BEGIN MESSAGE N%d ==========\n", n)

debug.FreeOSMemory()
shortName, err := msg.GetString("shortName")
if err != nil {
return errors.Wrap(err, "failed to get 'shortName' value")
}
}

func next(index codes.Index) (codes.Message, error) {
ms, err := index.Next(nil)
name, err := msg.GetString("name")
if err != nil {
return nil, err
return errors.Wrap(err, "failed to get 'name' value")
}
defer ms.Close()

msg, err := ms.Message()
log.Printf("Variable = [%s](%s)\n", shortName, name)

// just to measure timing
_, _, _, err = msg.Data()
if err != nil {
return nil, errors.Wrapf(err, "failed to get message from message stub")
return errors.Wrap(err, "failed to get data (latitudes, longitudes, values)")
}

return msg, nil
log.Printf("elapsed=%.0f ms", time.Since(start).Seconds()*1000)
log.Printf("============= END MESSAGE N%d ============\n\n", n)

debug.FreeOSMemory()

return nil
}
59 changes: 34 additions & 25 deletions cmd/example-get-messages-from-file-by-index/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,58 +13,67 @@ import (
)

func main() {
filename := flag.String("file", "", "file path, e.g. /tmp/ARPEGE_0.1_SP1_00H12H_201709290000.grib2")
filename := flag.String("file", "", "io path, e.g. /tmp/ARPEGE_0.1_SP1_00H12H_201709290000.grib2")

flag.Parse()

// get all messages where level=2
filter := map[string]interface{}{
"level": int64(10),
"level": int64(2),
}

index, err := codes.NewIndex(nil, *filename, "r", filter)
file, err := codes.OpenFileByPathWithFilter(*filename, "r", filter)
if err != nil {
log.Fatalf("failed to create index for file: %s", err.Error())
log.Fatalf("failed to open file: %s", err.Error())
}
defer index.Close()
defer file.Close()

n := 0
for {
start := time.Now()

msg, err := next(index)
err = process(file, n)
if err != nil {
if err == io.EOF {
break
}
log.Fatalf("failed to get message (#%d) from index: %s", n, err.Error())
}

log.Printf("============= BEGIN MESSAGE N%d ==========\n", n)
n++
}
}

shortName, _ := msg.Parameters()["shortName"]
name, _ := msg.Parameters()["name"]
func process(file codes.File, n int) error {
start := time.Now()

log.Printf("Variable = [%s](%s)\n", shortName, name)
msg, err := file.Next()
if err != nil {
return err
}
defer msg.Close()

log.Printf("elapsed=%f seconds", time.Since(start).Seconds())
log.Printf("============= END MESSAGE N%d ============\n\n", n)
n++
log.Printf("============= BEGIN MESSAGE N%d ==========\n", n)

debug.FreeOSMemory()
shortName, err := msg.GetString("shortName")
if err != nil {
return errors.Wrap(err, "failed to get 'shortName' value")
}
}

func next(index codes.Index) (codes.Message, error) {
ms, err := index.Next(nil)
name, err := msg.GetString("name")
if err != nil {
return nil, err
return errors.Wrap(err, "failed to get 'name' value")
}
defer ms.Close()

msg, err := ms.Message()
log.Printf("Variable = [%s](%s)\n", shortName, name)

// just to measure timing
_, _, _, err = msg.Data()
if err != nil {
return nil, errors.Wrapf(err, "failed to get message from message stub")
return errors.Wrap(err, "failed to get data (latitudes, longitudes, values)")
}

return msg, nil
log.Printf("elapsed=%.0f ms", time.Since(start).Seconds()*1000)
log.Printf("============= END MESSAGE N%d ============\n\n", n)

debug.FreeOSMemory()

return nil
}
5 changes: 5 additions & 0 deletions const.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package codes

const (
parameterMissingValue = "missingValue"
)
48 changes: 0 additions & 48 deletions context.go

This file was deleted.

8 changes: 8 additions & 0 deletions debug/log.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package debug

import (
"log"
"os"
)

var MemoryLeakLogger = log.New(os.Stderr, "MEMORY LEAK ", log.LstdFlags)
Loading

0 comments on commit 7e5aede

Please sign in to comment.