From 5f7fac2f647bc3f2361179f73ac4186234428c2d Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Wed, 26 Nov 2014 15:06:06 +0200 Subject: [PATCH] restructuring and optimizations - moved misc and pkg to data/scripts - started recover procedure - optimized clean stale ids --- apier/v1/apier.go | 3 ++ cmd/cgr-engine/cgr-engine.go | 28 ++++++++++++++++++- {misc => data/scripts}/copyright_header.txt | 2 +- {misc => data/scripts}/header.sh | 0 .../scripts/pkg}/debian/cgrates.default | 0 {pkg => data/scripts/pkg}/debian/cgrates.init | 0 {pkg => data/scripts/pkg}/debian/changelog | 0 {pkg => data/scripts/pkg}/debian/compat | 0 {pkg => data/scripts/pkg}/debian/control | 0 {pkg => data/scripts/pkg}/debian/copyright | 0 {pkg => data/scripts/pkg}/debian/docs | 0 {pkg => data/scripts/pkg}/debian/postinst | 0 {pkg => data/scripts/pkg}/debian/rules | 0 .../scripts/pkg}/debian/source/format | 0 .../scripts/pkg}/debian/source/options | 0 {pkg => data/scripts/pkg}/pkg_cgrates_deb.sh | 0 engine/destinations.go | 5 ++-- utils/slice.go | 7 +++-- 18 files changed, 38 insertions(+), 7 deletions(-) rename {misc => data/scripts}/copyright_header.txt (95%) rename {misc => data/scripts}/header.sh (100%) rename {pkg => data/scripts/pkg}/debian/cgrates.default (100%) rename {pkg => data/scripts/pkg}/debian/cgrates.init (100%) rename {pkg => data/scripts/pkg}/debian/changelog (100%) rename {pkg => data/scripts/pkg}/debian/compat (100%) rename {pkg => data/scripts/pkg}/debian/control (100%) rename {pkg => data/scripts/pkg}/debian/copyright (100%) rename {pkg => data/scripts/pkg}/debian/docs (100%) rename {pkg => data/scripts/pkg}/debian/postinst (100%) rename {pkg => data/scripts/pkg}/debian/rules (100%) rename {pkg => data/scripts/pkg}/debian/source/format (100%) rename {pkg => data/scripts/pkg}/debian/source/options (100%) rename {pkg => data/scripts/pkg}/pkg_cgrates_deb.sh (100%) diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 0a04b5f08..fe83aafb1 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "log" "path" "github.com/cgrates/cgrates/cache2go" @@ -792,9 +793,11 @@ func (self *ApierV1) ReloadCache(attrs utils.ApiReloadCache, reply *string) erro dcsKeys[idx] = engine.DERIVEDCHARGERS_PREFIX + dc } } + log.Print("Cache Rating") if err := self.RatingDb.CacheRating(dstKeys, rpKeys, rpfKeys, rpAlsKeys, lcrKeys); err != nil { return err } + log.Print("Cache Accounting") if err := self.AccountDb.CacheAccounting(actKeys, shgKeys, accAlsKeys, dcsKeys); err != nil { return err } diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index da112849c..4e5cafceb 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -22,8 +22,10 @@ import ( "errors" "flag" "fmt" + "io/ioutil" "log" "os" + "runtime" //"runtime" "strconv" "time" @@ -302,7 +304,22 @@ func writePid() { } } -func main() { +func start() { + defer func() { + if r := recover(); r != nil { + engine.Logger.Crit(fmt.Sprintf("CRITICAL ERROR: %v", r)) + var stack [8192]byte + runtime.Stack(stack[:], false) + if tmpFile, err := ioutil.TempFile(os.TempDir(), "cgr_coredump"); err != nil { + engine.Logger.Crit(fmt.Sprintf("Cannot create coredump file: %v", err)) + engine.Logger.Crit(string(stack[:])) + } else { + tmpFile.Write(stack[:]) + tmpFile.Close() + engine.Logger.Crit(fmt.Sprintf("Core dumped: %s", tmpFile.Name())) + } + } + }() flag.Parse() if *version { fmt.Println("CGRateS " + utils.VERSION) @@ -512,3 +529,12 @@ func main() { } engine.Logger.Info("Stopped all components. CGRateS shutdown!") } + +func main() { + defer func() { + if e := recover(); e != nil { + fmt.Fprintf(os.Stderr, "PANIC: %v\n", e) + } + }() + start() +} diff --git a/misc/copyright_header.txt b/data/scripts/copyright_header.txt similarity index 95% rename from misc/copyright_header.txt rename to data/scripts/copyright_header.txt index 829ae4a52..e1d08ea7d 100644 --- a/misc/copyright_header.txt +++ b/data/scripts/copyright_header.txt @@ -1,6 +1,6 @@ /* Rating system designed to be used in VoIP Carriers World -Copyright (C) 2013 ITsysCOM +Copyright (C) 2014 ITsysCOM This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/misc/header.sh b/data/scripts/header.sh similarity index 100% rename from misc/header.sh rename to data/scripts/header.sh diff --git a/pkg/debian/cgrates.default b/data/scripts/pkg/debian/cgrates.default similarity index 100% rename from pkg/debian/cgrates.default rename to data/scripts/pkg/debian/cgrates.default diff --git a/pkg/debian/cgrates.init b/data/scripts/pkg/debian/cgrates.init similarity index 100% rename from pkg/debian/cgrates.init rename to data/scripts/pkg/debian/cgrates.init diff --git a/pkg/debian/changelog b/data/scripts/pkg/debian/changelog similarity index 100% rename from pkg/debian/changelog rename to data/scripts/pkg/debian/changelog diff --git a/pkg/debian/compat b/data/scripts/pkg/debian/compat similarity index 100% rename from pkg/debian/compat rename to data/scripts/pkg/debian/compat diff --git a/pkg/debian/control b/data/scripts/pkg/debian/control similarity index 100% rename from pkg/debian/control rename to data/scripts/pkg/debian/control diff --git a/pkg/debian/copyright b/data/scripts/pkg/debian/copyright similarity index 100% rename from pkg/debian/copyright rename to data/scripts/pkg/debian/copyright diff --git a/pkg/debian/docs b/data/scripts/pkg/debian/docs similarity index 100% rename from pkg/debian/docs rename to data/scripts/pkg/debian/docs diff --git a/pkg/debian/postinst b/data/scripts/pkg/debian/postinst similarity index 100% rename from pkg/debian/postinst rename to data/scripts/pkg/debian/postinst diff --git a/pkg/debian/rules b/data/scripts/pkg/debian/rules similarity index 100% rename from pkg/debian/rules rename to data/scripts/pkg/debian/rules diff --git a/pkg/debian/source/format b/data/scripts/pkg/debian/source/format similarity index 100% rename from pkg/debian/source/format rename to data/scripts/pkg/debian/source/format diff --git a/pkg/debian/source/options b/data/scripts/pkg/debian/source/options similarity index 100% rename from pkg/debian/source/options rename to data/scripts/pkg/debian/source/options diff --git a/pkg/pkg_cgrates_deb.sh b/data/scripts/pkg/pkg_cgrates_deb.sh similarity index 100% rename from pkg/pkg_cgrates_deb.sh rename to data/scripts/pkg/pkg_cgrates_deb.sh diff --git a/engine/destinations.go b/engine/destinations.go index 51973da47..993ff301f 100644 --- a/engine/destinations.go +++ b/engine/destinations.go @@ -91,14 +91,15 @@ func CleanStalePrefixes(destIds []string) { } for prefix, idIDs := range prefixMap { dIDs := idIDs.Value().([]interface{}) + strdIDs := utils.ConvertInterfaceSliceToStringMap(dIDs) changed := false for _, searchedDID := range destIds { - if i, found := utils.GetSliceMemberIndex(utils.ConvertInterfaceSliceToStringSlice(dIDs), searchedDID); found { + if i, found := strdIDs[searchedDID]; found { if len(dIDs) == 1 { // remove de prefix from cache cache2go.RemKey(DESTINATION_PREFIX + prefix) } else { - // delte the testination from list and put the new list in chache + // delete the destination from list and put the new list in chache dIDs[i], dIDs = dIDs[len(dIDs)-1], dIDs[:len(dIDs)-1] changed = true } diff --git a/utils/slice.go b/utils/slice.go index d0bde4d28..bec15c525 100644 --- a/utils/slice.go +++ b/utils/slice.go @@ -52,9 +52,10 @@ func SliceMemberHasPrefix(ss []string, prfx string) bool { return false } -func ConvertInterfaceSliceToStringSlice(is []interface{}) (result []string) { - for _, i := range is { - result = append(result, i.(string)) +func ConvertInterfaceSliceToStringMap(is []interface{}) (result map[string]int) { + result = make(map[string]int) + for index, i := range is { + result[i.(string)] = index } return result }