-
Wolfgang Welz authoredWolfgang Welz authored
plugin.go 1.63 KiB
package webapi_spammer
import (
"net/http"
"time"
"github.com/iotaledger/goshimmer/packages/node"
"github.com/iotaledger/goshimmer/packages/transactionspammer"
"github.com/iotaledger/goshimmer/plugins/webapi"
"github.com/labstack/echo"
)
var PLUGIN = node.NewPlugin("Spammer", node.Disabled, configure)
func configure(plugin *node.Plugin) {
webapi.AddEndpoint("spammer", WebApiHandler)
}
func WebApiHandler(c echo.Context) error {
c.Set("requestStartTime", time.Now())
var request webRequest
if err := c.Bind(&request); err != nil {
return requestFailed(c, err.Error())
}
switch request.Cmd {
case "start":
if request.Tps == 0 {
request.Tps = 1000
}
transactionspammer.Stop()
transactionspammer.Start(request.Tps)
return requestSuccessful(c, "started spamming transactions")
case "stop":
transactionspammer.Stop()
return requestSuccessful(c, "stopped spamming transactions")
default:
return requestFailed(c, "invalid cmd in request")
}
}
func requestSuccessful(c echo.Context, message string) error {
return c.JSON(http.StatusOK, webResponse{
Duration: time.Since(c.Get("requestStartTime").(time.Time)).Nanoseconds() / 1e6,
Status: "success",
Message: message,
})
}
func requestFailed(c echo.Context, message string) error {
return c.JSON(http.StatusOK, webResponse{
Duration: time.Since(c.Get("requestStartTime").(time.Time)).Nanoseconds() / 1e6,
Status: "failed",
Message: message,
})
}
type webResponse struct {
Duration int64 `json:"duration"`
Status string `json:"status"`
Message string `json:"message"`
}
type webRequest struct {
Cmd string `json:"cmd"`
Tps uint `json:"tps"`
}