mse-go-demo/grpc/c-server/main.go (69 lines of code) (raw):
// Package main implements a server for Greeter service.
package main
import (
"context"
"io/ioutil"
"log"
"net"
"os"
"regexp"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
pb "github.com/aliyun/alibabacloud-microservice-demo/mse-go-demo/grpc/c-server/proto"
)
const (
port = ":50053"
)
// server is used to implement helloworld.GreeterServer.
type server struct {
pb.UnimplementedCServiceServer
}
func (s *server) CMethod(context.Context, *pb.CRequest) (*pb.CReply, error) {
reply := &pb.CReply{
Message: generateMessage("C"),
}
return reply, nil
}
func main() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterCServiceServer(s, &server{})
log.Printf("server listening at %v", lis.Addr())
// Register reflection service on gRPC server.
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
func generateMessage(message string) string {
tag := parseTag()
if tag != "" {
message += "-" + tag
}
hostname, err := os.Hostname()
if err == nil {
message += "[" + hostname + "]"
}
return message
}
func parseTag() string {
var re = regexp.MustCompile(`(?m)alicloud\.service\.tag="(?P<tag>.*)"`)
bs, err := ioutil.ReadFile("/etc/podinfo/labels")
if err != nil {
return ""
}
content := string(bs)
result := re.FindStringSubmatch(content)
groupNames := re.SubexpNames()
index := 0
for i, name := range groupNames {
if name == "tag" {
index = i
break
}
}
if len(result) <= index {
return ""
}
return result[index]
}