mirror of https://github.com/certusone/santa.git
Merge pull request #16 from terra-project/develop
[Feature] Append success webhook
This commit is contained in:
commit
bb58b55b6a
|
@ -28,8 +28,11 @@ var configCmd = &cobra.Command{
|
|||
TriggerInterval: "5",
|
||||
FeeAmount: "1000000uluna",
|
||||
|
||||
WebHookURL: "",
|
||||
WebHookDataKey: "text",
|
||||
FailWebHookURL: "",
|
||||
FailWebHookDataKey: "text",
|
||||
|
||||
SuccessWebHookURL: "",
|
||||
SuccessWebHookDataKey: "text",
|
||||
}
|
||||
|
||||
if _, err := os.Stat(g.KeyDir); os.IsNotExist(err) {
|
||||
|
|
|
@ -39,8 +39,11 @@ type SantaApp struct {
|
|||
TriggerInterval string `json:"trigger_interval" yaml:"trigger_interval"`
|
||||
FeeAmount string `json:"fee_amount" yaml:"fee_amount"`
|
||||
|
||||
WebHookURL string `json:"webhook_url" yaml:"webhook_url"`
|
||||
WebHookDataKey string `json:"webhook_data_key" yaml:"webhook_data_key"`
|
||||
SuccessWebHookURL string `json:"success_webhook_url" yaml:"success_webhook_url"`
|
||||
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"`
|
||||
Commit string `yaml:"commit,omitempty"`
|
||||
|
|
|
@ -16,6 +16,8 @@ import (
|
|||
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
||||
rpc "github.com/tendermint/tendermint/rpc/lib/types"
|
||||
abci "github.com/tendermint/tendermint/types"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
var aminoCdc = amino.NewCodec()
|
||||
|
@ -83,24 +85,12 @@ func (app SantaApp) ListenNewBLock(isTest bool) {
|
|||
txHash, err := app.SendTx(blockEvent.Block.ChainID)
|
||||
if err != nil {
|
||||
log.Printf("[Fail] to send tx: %s", 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
|
||||
}
|
||||
|
||||
// send notification to slack
|
||||
http.Post(app.WebHookURL, "application/json", bytes.NewBuffer(notiBody))
|
||||
continue
|
||||
}
|
||||
|
||||
app.sendFailMessage(err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
log.Printf("[Success] Height: %d,\tTxHash: %s\n", blockEvent.Block.Height, txHash)
|
||||
app.sendSuccessMessage(blockEvent.Block.Height)
|
||||
}
|
||||
|
||||
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
|
||||
type Query struct {
|
||||
Query string `json:"query"`
|
||||
|
|
|
@ -28,3 +28,42 @@ func TestWebsocketListen(t *testing.T) {
|
|||
result := logBuf.String()
|
||||
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