Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "context"
  5. "fmt"
  6. "os"
  7. "sort"
  8.  
  9. "github.com/open-policy-agent/opa/metrics"
  10.  
  11. "github.com/open-policy-agent/opa/rego"
  12. )
  13.  
  14. func printMetrics(m metrics.Metrics) {
  15. all := m.All()
  16. var keys []string
  17. for k := range all {
  18. keys = append(keys, k)
  19. }
  20. sort.Strings(keys)
  21.  
  22. for _, k := range keys {
  23. fmt.Printf("%s: %+v\n", k, all[k].(map[string]interface{})["mean"])
  24. }
  25. }
  26.  
  27. func main() {
  28. ctx := context.Background()
  29.  
  30. // Raw input data that will be used in the first evaluation
  31. input := map[string]interface{}{"x": 2}
  32.  
  33. m := metrics.New()
  34. bh := metrics.New()
  35. ah := metrics.New()
  36.  
  37. iterations := 5000
  38.  
  39. for i := 0; i < iterations; i++ {
  40. // Create a simple query over the input.
  41. r := rego.New(
  42. rego.Module("test.rego", `
  43. package test
  44. p {
  45. input.x = 1
  46. }
  47. `),
  48. rego.Query("data.test.p"),
  49. rego.Input(input),
  50. rego.Metrics(m),
  51. )
  52.  
  53. // Run evaluation.
  54. _, err := r.Eval(ctx)
  55.  
  56. if err != nil {
  57. fmt.Printf("error: %s", err.Error())
  58. os.Exit(1)
  59. }
  60.  
  61. // Update the "before" histogram
  62. for k, v := range m.All() {
  63. bh.Histogram(k).Update(v.(int64))
  64. }
  65. m.Clear()
  66.  
  67. // Update input
  68. input["x"] = 1
  69.  
  70. r.Update(
  71. rego.Input(input),
  72. )
  73.  
  74. // Evaluate again
  75. _, err = r.Eval(ctx)
  76.  
  77. if err != nil {
  78. fmt.Printf("error: %s", err.Error())
  79. os.Exit(1)
  80. }
  81.  
  82. // Update the "after" histogram
  83. for k, v := range m.All() {
  84. ah.Histogram(k).Update(v.(int64))
  85. }
  86. m.Clear()
  87. }
  88.  
  89. fmt.Println("iterations:", iterations)
  90. fmt.Println("--- Baseline (mean)")
  91. printMetrics(bh)
  92. fmt.Println("--- With Update() (mean)")
  93. printMetrics(ah)
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement