Skip to content

Commit

Permalink
Merge a64f3fb into 5e15493
Browse files Browse the repository at this point in the history
  • Loading branch information
lftakakura committed Oct 2, 2018
2 parents 5e15493 + a64f3fb commit 41f23dd
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 6 deletions.
3 changes: 2 additions & 1 deletion eventforwarder/eventforwarder_suite_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package eventforwarder_test

import (
"encoding/base64"
"time"

"github.com/golang/mock/gomock"
Expand Down Expand Up @@ -46,7 +47,7 @@ var (
hostPort = int32(50000)
ipv6KubernetesLabelKey = "test.io/ipv6"
ipv6Label = "testIpv6"
nodeLabels = map[string]string{ipv6KubernetesLabelKey: ipv6Label}
nodeLabels = map[string]string{ipv6KubernetesLabelKey: base64.StdEncoding.EncodeToString([]byte("testIpv6"))}
yaml = `name: scheduler
game: game
forwarders:
Expand Down
57 changes: 57 additions & 0 deletions eventforwarder/forward.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,16 @@ func ForwardRoomEvent(
l.WithError(err).Error("error getting room info from redis")
return nil, err
}

reportIpv6Status(
infos,
room.SchedulerName, RouteRoomEvent,
db,
schedulerCache,
logger,
time.Now().Sub(startTime),
)

} else { // fill host and port with zero values when pingTimeout event so it won't break the GRPCForwarder
infos["host"] = ""
infos["ipv6Label"] = ""
Expand Down Expand Up @@ -345,6 +355,53 @@ func reportRPCStatus(
}
}

// reportIpv6Status sends to StatsD success true if suceessfuly read
// ipv6 label and false otherwise
func reportIpv6Status(
infos map[string]interface{},
schedulerName, forwardRoute string,
db interfaces.DB,
cache *models.SchedulerCache,
logger logrus.FieldLogger,
responseTime time.Duration,
) {
if !reporters.HasReporters() {
return
}

scheduler, err := cache.LoadScheduler(db, schedulerName, true)
if err != nil {
logger.
WithField("operation", "reportIpv6Status").
WithError(err).
Error("failed to report Ipv6 read status to StatsD")
return
}

game := scheduler.ConfigYAML.Game

status := map[string]interface{}{
reportersConstants.TagGame: game,
reportersConstants.TagScheduler: schedulerName,
reportersConstants.TagNodeHost: infos["host"].(string),
reportersConstants.TagHostname: Hostname(),
reportersConstants.TagRoute: forwardRoute,
reportersConstants.TagStatus: "success",
}

if infos["ipv6Label"] == nil || infos["ipv6Label"].(string) == "" {
status[reportersConstants.TagStatus] = "failed"
}

reporterErr := reporters.Report(reportersConstants.EventNodeIpv6Status, status)
if reporterErr != nil {
logger.
WithField("operation", "reportIpv6Status").
WithError(err).
Error("failed to report Ipv6 read status to StatsD")
}
}

//Hostname returns the host name.
//If running on Kubernetes, returns the pod name.
func Hostname() string {
Expand Down
23 changes: 21 additions & 2 deletions eventforwarder/forward_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ var _ = Describe("Forward", func() {
reportersConstants.TagStatus: "success",
})

mockReporter.EXPECT().Report(reportersConstants.EventNodeIpv6Status, map[string]interface{}{
reportersConstants.TagGame: gameName,
reportersConstants.TagScheduler: schedulerName,
reportersConstants.TagNodeHost: nodeAddress,
reportersConstants.TagHostname: Hostname(),
reportersConstants.TagRoute: RouteRoomEvent,
reportersConstants.TagStatus: "success",
})

mockReporter.EXPECT().Report(reportersConstants.EventRPCDuration, gomock.Any())

response, err := ForwardRoomEvent(
Expand Down Expand Up @@ -109,12 +118,13 @@ var _ = Describe("Forward", func() {
It("should report fail if event forward fails", func() {
errMsg := "event forward failed"
ctx := context.Background()
noIpv6roomAddrGetter := models.NewRoomAddressesFromHostPort("")
mockEventForwarder.EXPECT().Forward(
ctx,
models.StatusReady,
map[string]interface{}{
"host": nodeAddress,
"ipv6Label": ipv6Label,
"ipv6Label": "",
"port": hostPort,
"roomId": roomName,
"game": gameName,
Expand All @@ -132,6 +142,15 @@ var _ = Describe("Forward", func() {
reportersConstants.TagReason: errMsg,
})

mockReporter.EXPECT().Report(reportersConstants.EventNodeIpv6Status, map[string]interface{}{
reportersConstants.TagGame: gameName,
reportersConstants.TagScheduler: schedulerName,
reportersConstants.TagNodeHost: nodeAddress,
reportersConstants.TagHostname: Hostname(),
reportersConstants.TagRoute: RouteRoomEvent,
reportersConstants.TagStatus: "failed",
})

mockReporter.EXPECT().Report(reportersConstants.EventRPCDuration, gomock.Any())

response, err := ForwardRoomEvent(
Expand All @@ -145,7 +164,7 @@ var _ = Describe("Forward", func() {
nil,
cache,
logger,
roomAddrGetter,
noIpv6roomAddrGetter,
)

Expect(err).To(HaveOccurred())
Expand Down
7 changes: 6 additions & 1 deletion models/room_address.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
package models

import (
"encoding/base64"
"errors"

maestroErrors "github.com/topfreegames/maestro/errors"
Expand Down Expand Up @@ -68,7 +69,11 @@ func getRoomAddresses(IsNodePort bool, ipv6KubernetesLabelKey string, room *Room

// get IPv6 label from node
if ipv6Label, ok := node.GetLabels()[ipv6KubernetesLabelKey]; ok {
rAddresses.Ipv6Label = ipv6Label
ipv6LabelBytes, err := base64.StdEncoding.DecodeString(ipv6Label)
if err != nil {
return nil, err
}
rAddresses.Ipv6Label = string(ipv6LabelBytes)
}

if IsNodePort {
Expand Down
8 changes: 6 additions & 2 deletions models/room_address_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
package models_test

import (
"encoding/base64"
"fmt"

"k8s.io/apimachinery/pkg/util/intstr"
Expand Down Expand Up @@ -85,7 +86,7 @@ var _ = Describe("AddressGetter", func() {
port = int32(1234)
nodePort = int32(1234)
ipv6KubernetesLabelKey = "test.io/ipv6"
ipv6Label = "testIpv6"
ipv6Label = base64.StdEncoding.EncodeToString([]byte("testIpv6"))
nodeLabels = map[string]string{ipv6KubernetesLabelKey: ipv6Label}
)

Expand Down Expand Up @@ -173,7 +174,10 @@ var _ = Describe("AddressGetter", func() {
roomAddresses, err := addrGetter.Get(room, clientset)
Expect(err).NotTo(HaveOccurred())
Expect(roomAddresses.Host).To(Equal(host))
Expect(roomAddresses.Ipv6Label).To(Equal(ipv6Label))

expectedIpv6Label, _ := base64.StdEncoding.DecodeString(ipv6Label)
Expect(roomAddresses.Ipv6Label).To(Equal(string(expectedIpv6Label)))

Expect(roomAddresses.Ports).To(HaveLen(1))
Expect(roomAddresses.Ports[0]).To(Equal(
&models.RoomPort{
Expand Down
3 changes: 3 additions & 0 deletions reporters/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ const (
EventPodLastStatus = "pod.last_status"

EventResponseTime = "response.time"

EventNodeIpv6Status = "nodeIpv6.status"
)

//Reason{...} represents reasons for a pod/gru being deleted
Expand All @@ -41,6 +43,7 @@ const (
TagReason = "maestro-reason"
TagStatus = "maestro-status"
TagHostname = "maestro-hostname"
TagNodeHost = "maestro-room-node"
TagRoute = "maestro-route"
TagResponseTime = "maestro-response-time"
TagHTTPStatus = "maestro-http-status"
Expand Down

0 comments on commit 41f23dd

Please sign in to comment.