blob: 9d0b4ad3a0e04ab481ce608abeb6d50a02c804fa [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"bytes"
"fmt"
"io"
"log"
"math/rand"
"net/http"
"os"
"time"
_ "github.com/apache/skywalking-go"
"github.com/apache/skywalking-go/toolkit/logging"
"github.com/apache/skywalking-go/toolkit/trace"
)
var providerURL string
func infoHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("Received %s request to /info", r.Method)
sleepTime := rand.Intn(500) + 500
time.Sleep(time.Duration(sleepTime) * time.Millisecond)
var resp *http.Response
var err error
resp, err = http.Post(providerURL+"/info", "application/json", bytes.NewBufferString(""))
if err != nil {
http.Error(w, fmt.Sprintf("Error calling provider: %v", err), http.StatusInternalServerError)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
http.Error(w, fmt.Sprintf("Error reading provider response: %v", err), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write(body)
logging.Debug("this is debug msg", "foo1", "bar1")
logging.Info("this is info msg", "foo2", "bar2")
logging.Warn("this is warn msg", "foo3", "bar3")
logging.Error("this is error msg", "foo4", "bar4")
log.Printf("Consumer processed %s request to /info", r.Method)
}
func usersHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("Received %s request to /users", r.Method)
sleepTime := rand.Intn(500) + 500
time.Sleep(time.Duration(sleepTime) * time.Millisecond)
var resp *http.Response
var err error
resp, err = http.Post(providerURL+"/users", "application/json", bytes.NewBufferString("{}"))
if err != nil {
http.Error(w, fmt.Sprintf("Error calling provider: %v", err), http.StatusInternalServerError)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
http.Error(w, fmt.Sprintf("Error reading provider response: %v", err), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write(body)
log.Printf("Consumer processed %s request to /users", r.Method)
}
func correlationHandler(w http.ResponseWriter, r *http.Request) {
log.Printf("Received %s request to /correlation", r.Method)
sleepTime := rand.Intn(500) + 500
time.Sleep(time.Duration(sleepTime) * time.Millisecond)
trace.SetCorrelation("CONSUMER_KEY", "consumer")
var resp *http.Response
var err error
resp, err = http.Post(providerURL+"/correlation", "application/json", bytes.NewBufferString(""))
if err != nil {
http.Error(w, fmt.Sprintf("Error calling provider: %v", err), http.StatusInternalServerError)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
http.Error(w, fmt.Sprintf("Error reading provider response: %v", err), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write(body)
log.Printf("Consumer processed %s request to /correlation", r.Method)
}
func main() {
providerURL = os.Getenv("PROVIDER_URL")
if providerURL == "" {
providerURL = "http://localhost:8080"
}
log.Printf("Provider URL: %s\n", providerURL)
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("ok"))
})
http.HandleFunc("/info", infoHandler)
http.HandleFunc("/users", usersHandler)
http.HandleFunc("/correlation", correlationHandler)
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatalf("Error starting server: %v", err)
}
}