mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License-AGPL.txt in the project root for license information.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
func main() {
|
|
errors := make(chan error)
|
|
defer close(errors)
|
|
|
|
go func() {
|
|
addr := ":9000"
|
|
fmt.Println("Serving HTTP", addr)
|
|
err := http.ListenAndServe(addr, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, _ = w.Write([]byte(`hello world\n`))
|
|
}))
|
|
if err != nil {
|
|
fmt.Println("Failed to serve HTTP on", addr, err)
|
|
errors <- err
|
|
}
|
|
}()
|
|
|
|
go func() {
|
|
if err := serveGRPC(); err != nil {
|
|
fmt.Println("Failed to serve gRPC", err)
|
|
errors <- err
|
|
}
|
|
}()
|
|
|
|
// detect OS signals
|
|
sigs := make(chan os.Signal, 1)
|
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
select {
|
|
case err := <-errors:
|
|
fmt.Println("Encountered errors when running servers", err)
|
|
os.Exit(1)
|
|
case <-sigs:
|
|
fmt.Println("Received termination signal, shutting down.")
|
|
// TODO(milanpavlik): Graceful server shutdown
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
|
|
func serveGRPC() error {
|
|
port := 9001
|
|
srv := grpc.NewServer()
|
|
|
|
listener, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
|
if err != nil {
|
|
return fmt.Errorf("failed to acquire port %d", port)
|
|
}
|
|
|
|
fmt.Println("Serving gRPC", listener.Addr().String())
|
|
if serveErr := srv.Serve(listener); err != nil {
|
|
return fmt.Errorf("failed to serve gRPC: %w", serveErr)
|
|
}
|
|
|
|
return nil
|
|
}
|