mirror of https://github.com/certusone/santa.git
append success webhook
This commit is contained in:
parent
da30e9987f
commit
94e6d91e06
|
@ -28,8 +28,11 @@ var configCmd = &cobra.Command{
|
||||||
TriggerInterval: "5",
|
TriggerInterval: "5",
|
||||||
FeeAmount: "1000000uluna",
|
FeeAmount: "1000000uluna",
|
||||||
|
|
||||||
WebHookURL: "",
|
FailWebHookURL: "",
|
||||||
WebHookDataKey: "text",
|
FailWebHookDataKey: "text",
|
||||||
|
|
||||||
|
SuccessWebHookURL: "",
|
||||||
|
SuccessWebHookDataKey: "text",
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(g.KeyDir); os.IsNotExist(err) {
|
if _, err := os.Stat(g.KeyDir); os.IsNotExist(err) {
|
||||||
|
|
|
@ -39,8 +39,11 @@ type SantaApp struct {
|
||||||
TriggerInterval string `json:"trigger_interval" yaml:"trigger_interval"`
|
TriggerInterval string `json:"trigger_interval" yaml:"trigger_interval"`
|
||||||
FeeAmount string `json:"fee_amount" yaml:"fee_amount"`
|
FeeAmount string `json:"fee_amount" yaml:"fee_amount"`
|
||||||
|
|
||||||
WebHookURL string `json:"webhook_url" yaml:"webhook_url"`
|
SuccessWebHookURL string `json:"success_webhook_url" yaml:"success_webhook_url"`
|
||||||
WebHookDataKey string `json:"webhook_data_key" yaml:"webhook_data_key"`
|
SuccessWebHookDataKey string `json:"success_webhook_data_key" yaml:"success_webhook_data_key"`
|
||||||
|
|
||||||
|
FailWebHookURL string `json:"fail_webhook_url" yaml:"fail_webhook_url"`
|
||||||
|
FailWebHookDataKey string `json:"fail_webhook_data_key" yaml:"fail_webhook_data_key"`
|
||||||
|
|
||||||
Version string `yaml:"version,omitempty"`
|
Version string `yaml:"version,omitempty"`
|
||||||
Commit string `yaml:"commit,omitempty"`
|
Commit string `yaml:"commit,omitempty"`
|
||||||
|
|
|
@ -16,6 +16,8 @@ import (
|
||||||
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
||||||
rpc "github.com/tendermint/tendermint/rpc/lib/types"
|
rpc "github.com/tendermint/tendermint/rpc/lib/types"
|
||||||
abci "github.com/tendermint/tendermint/types"
|
abci "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
var aminoCdc = amino.NewCodec()
|
var aminoCdc = amino.NewCodec()
|
||||||
|
@ -83,24 +85,12 @@ func (app SantaApp) ListenNewBLock(isTest bool) {
|
||||||
txHash, err := app.SendTx(blockEvent.Block.ChainID)
|
txHash, err := app.SendTx(blockEvent.Block.ChainID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[Fail] to send tx: %s", err.Error())
|
log.Printf("[Fail] to send tx: %s", err.Error())
|
||||||
|
app.sendFailMessage(err.Error())
|
||||||
if app.WebHookURL != "" && app.WebHookDataKey != "" {
|
|
||||||
notiBody, err := json.Marshal(map[string]string{
|
|
||||||
app.WebHookDataKey: fmt.Sprintf("[Fail] sending tx: %s", err.Error()),
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// send notification to slack
|
|
||||||
http.Post(app.WebHookURL, "application/json", bytes.NewBuffer(notiBody))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("[Success] Height: %d,\tTxHash: %s\n", blockEvent.Block.Height, txHash)
|
log.Printf("[Success] Height: %d,\tTxHash: %s\n", blockEvent.Block.Height, txHash)
|
||||||
|
app.sendSuccessMessage(blockEvent.Block.Height)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isTest {
|
if isTest {
|
||||||
|
@ -109,6 +99,45 @@ func (app SantaApp) ListenNewBLock(isTest bool) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (app SantaApp) sendFailMessage(msg string) (err error) {
|
||||||
|
if app.FailWebHookURL != "" && app.FailWebHookDataKey != "" {
|
||||||
|
notiBody, _ := json.Marshal(map[string]string{
|
||||||
|
app.FailWebHookDataKey: fmt.Sprintf("[Fail] sending tx: %s", msg),
|
||||||
|
})
|
||||||
|
|
||||||
|
// send notification to slack
|
||||||
|
_, err = http.Post(app.FailWebHookURL, "application/json", bytes.NewBuffer(notiBody))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (app SantaApp) sendSuccessMessage(height int64) (err error) {
|
||||||
|
if app.SuccessWebHookURL != "" && app.SuccessWebHookDataKey != "" {
|
||||||
|
feeCoin, err := sdk.ParseCoin(app.FeeAmount)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
amount := sdk.NewDecFromIntWithPrec(feeCoin.Amount, 6).String()
|
||||||
|
denom := strings.ToUpper(strings.TrimLeft(feeCoin.Denom, "u"))
|
||||||
|
notiBody, _ := json.Marshal(map[string]string{
|
||||||
|
app.SuccessWebHookDataKey: fmt.Sprintf("Hohoho! Santa just gave out %s %s to stakeholders in presents in block %d", amount, denom, height),
|
||||||
|
})
|
||||||
|
|
||||||
|
// send notification to slack
|
||||||
|
_, err = http.Post(app.SuccessWebHookURL, "application/json", bytes.NewBuffer(notiBody))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// no-lint
|
// no-lint
|
||||||
type Query struct {
|
type Query struct {
|
||||||
Query string `json:"query"`
|
Query string `json:"query"`
|
||||||
|
|
|
@ -28,3 +28,42 @@ func TestWebsocketListen(t *testing.T) {
|
||||||
result := logBuf.String()
|
result := logBuf.String()
|
||||||
require.True(t, strings.Contains(result, "[Success]"))
|
require.True(t, strings.Contains(result, "[Success]"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSendSuccess(t *testing.T) {
|
||||||
|
app := setupWithPlentyBalanceAccount(t)
|
||||||
|
err := app.sendSuccessMessage(10)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
app.SuccessWebHookURL = "https://google.co.kr"
|
||||||
|
app.SuccessWebHookDataKey = "text"
|
||||||
|
err = app.sendSuccessMessage(10)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// invalid fee coin
|
||||||
|
app.FeeAmount = "u1lu1n1a"
|
||||||
|
err = app.sendSuccessMessage(10)
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
|
// invalid url
|
||||||
|
app.FeeAmount = "1uluna"
|
||||||
|
app.SuccessWebHookURL = "http://nonon"
|
||||||
|
err = app.sendSuccessMessage(10)
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSendFail(t *testing.T) {
|
||||||
|
app := setupWithPlentyBalanceAccount(t)
|
||||||
|
err := app.sendFailMessage("msg")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
app.FailWebHookURL = "https://google.co.kr"
|
||||||
|
app.FailWebHookDataKey = "text"
|
||||||
|
err = app.sendFailMessage("msg")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// invalid url
|
||||||
|
app.FeeAmount = "1uluna"
|
||||||
|
app.FailWebHookURL = "http://nonon"
|
||||||
|
err = app.sendFailMessage("msg")
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
Loading…
Reference in New Issue