Add funcName to web api logs

This commit is contained in:
jholdstock 2020-06-25 11:13:42 +01:00 committed by David Hill
parent fdc8f22199
commit 9d6cf57219
5 changed files with 56 additions and 50 deletions

View File

@ -15,7 +15,6 @@ else
OUT_FORMAT="colored-line-number" OUT_FORMAT="colored-line-number"
fi fi
# some linters are commented until code is in a more stable state.
golangci-lint run --disable-all --deadline=10m \ golangci-lint run --disable-all --deadline=10m \
--out-format=$OUT_FORMAT \ --out-format=$OUT_FORMAT \
--enable=gofmt \ --enable=gofmt \

View File

@ -60,6 +60,8 @@ func getCurrentFee(dcrdClient *rpc.DcrdRPC) (dcrutil.Amount, error) {
// feeAddress is the handler for "POST /feeaddress". // feeAddress is the handler for "POST /feeaddress".
func feeAddress(c *gin.Context) { func feeAddress(c *gin.Context) {
funcName := "feeAddress"
// Get values which have been added to context by middleware. // Get values which have been added to context by middleware.
ticket := c.MustGet("Ticket").(database.Ticket) ticket := c.MustGet("Ticket").(database.Ticket)
knownTicket := c.MustGet("KnownTicket").(bool) knownTicket := c.MustGet("KnownTicket").(bool)
@ -73,7 +75,7 @@ func feeAddress(c *gin.Context) {
var feeAddressRequest FeeAddressRequest var feeAddressRequest FeeAddressRequest
if err := c.ShouldBindJSON(&feeAddressRequest); err != nil { if err := c.ShouldBindJSON(&feeAddressRequest); err != nil {
log.Warnf("Bad feeaddress request from %s: %v", c.ClientIP(), err) log.Warnf("%s: Bad request from %s: %v", funcName, c.ClientIP(), err)
sendErrorWithMsg(err.Error(), errBadRequest, c) sendErrorWithMsg(err.Error(), errBadRequest, c)
return return
} }
@ -84,7 +86,7 @@ func feeAddress(c *gin.Context) {
if ticket.FeeTxStatus == database.FeeReceieved || if ticket.FeeTxStatus == database.FeeReceieved ||
ticket.FeeTxStatus == database.FeeBroadcast || ticket.FeeTxStatus == database.FeeBroadcast ||
ticket.FeeTxStatus == database.FeeConfirmed { ticket.FeeTxStatus == database.FeeConfirmed {
log.Warnf("Fee tx already received from %s: ticketHash=%s", c.ClientIP(), ticket.Hash) log.Warnf("%s: Fee tx already received from %s: ticketHash=%s", funcName, c.ClientIP(), ticket.Hash)
sendError(errFeeAlreadyReceived, c) sendError(errFeeAlreadyReceived, c)
return return
} }
@ -92,7 +94,7 @@ func feeAddress(c *gin.Context) {
// Get ticket details. // Get ticket details.
rawTicket, err := dcrdClient.GetRawTransaction(ticketHash) rawTicket, err := dcrdClient.GetRawTransaction(ticketHash)
if err != nil { if err != nil {
log.Errorf("Could not retrieve tx %s for %s: %v", ticketHash, c.ClientIP(), err) log.Errorf("%s: Could not retrieve tx %s for %s: %v", funcName, ticketHash, c.ClientIP(), err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
@ -100,12 +102,12 @@ func feeAddress(c *gin.Context) {
// Ensure this ticket is eligible to vote at some point in the future. // Ensure this ticket is eligible to vote at some point in the future.
canVote, err := dcrdClient.CanTicketVote(rawTicket, ticketHash, cfg.NetParams) canVote, err := dcrdClient.CanTicketVote(rawTicket, ticketHash, cfg.NetParams)
if err != nil { if err != nil {
log.Errorf("canTicketVote error: %v", err) log.Errorf("%s: canTicketVote error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
if !canVote { if !canVote {
log.Warnf("Unvotable ticket %s from %s", ticketHash, c.ClientIP()) log.Warnf("%s: Unvotable ticket %s from %s", funcName, ticketHash, c.ClientIP())
sendError(errTicketCannotVote, c) sendError(errTicketCannotVote, c)
return return
} }
@ -118,7 +120,7 @@ func feeAddress(c *gin.Context) {
if ticket.FeeExpired() { if ticket.FeeExpired() {
newFee, err := getCurrentFee(dcrdClient) newFee, err := getCurrentFee(dcrdClient)
if err != nil { if err != nil {
log.Errorf("getCurrentFee error: %v", err) log.Errorf("%s: getCurrentFee error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
@ -127,12 +129,12 @@ func feeAddress(c *gin.Context) {
err = db.UpdateTicket(ticket) err = db.UpdateTicket(ticket)
if err != nil { if err != nil {
log.Errorf("UpdateTicket error: %v", err) log.Errorf("%s: UpdateTicket error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
log.Debugf("Expired fee updated for ticket: newFeeAmt=%f, ticketHash=%s", log.Debugf("%s: Expired fee updated for ticket: newFeeAmt=%f, ticketHash=%s",
newFee, ticket.Hash) funcName, newFee, ticket.Hash)
} }
sendJSONResponse(feeAddressResponse{ sendJSONResponse(feeAddressResponse{
Timestamp: now.Unix(), Timestamp: now.Unix(),
@ -150,14 +152,14 @@ func feeAddress(c *gin.Context) {
fee, err := getCurrentFee(dcrdClient) fee, err := getCurrentFee(dcrdClient)
if err != nil { if err != nil {
log.Errorf("getCurrentFee error: %v", err) log.Errorf("%s: getCurrentFee error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
newAddress, newAddressIdx, err := getNewFeeAddress(db, addrGen) newAddress, newAddressIdx, err := getNewFeeAddress(db, addrGen)
if err != nil { if err != nil {
log.Errorf("getNewFeeAddress error: %v", err) log.Errorf("%s: getNewFeeAddress error: %v", funcName, err)
} }
now := time.Now() now := time.Now()
@ -178,13 +180,13 @@ func feeAddress(c *gin.Context) {
err = db.InsertNewTicket(dbTicket) err = db.InsertNewTicket(dbTicket)
if err != nil { if err != nil {
log.Errorf("InsertTicket error: %v", err) log.Errorf("%s: InsertTicket error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
log.Debugf("Fee address created for new ticket: tktConfirmed=%t, feeAddrIdx=%d, "+ log.Debugf("%s: Fee address created for new ticket: tktConfirmed=%t, feeAddrIdx=%d, "+
"feeAddr=%s, feeAmt=%s, ticketHash=%s", confirmed, newAddressIdx, newAddress, fee, ticketHash) "feeAddr=%s, feeAmt=%s, ticketHash=%s", funcName, confirmed, newAddressIdx, newAddress, fee, ticketHash)
sendJSONResponse(feeAddressResponse{ sendJSONResponse(feeAddressResponse{
Timestamp: now.Unix(), Timestamp: now.Unix(),

View File

@ -13,6 +13,7 @@ import (
// payFee is the handler for "POST /payfee". // payFee is the handler for "POST /payfee".
func payFee(c *gin.Context) { func payFee(c *gin.Context) {
funcName := "payFee"
// Get values which have been added to context by middleware. // Get values which have been added to context by middleware.
ticket := c.MustGet("Ticket").(database.Ticket) ticket := c.MustGet("Ticket").(database.Ticket)
@ -25,14 +26,14 @@ func payFee(c *gin.Context) {
} }
if !knownTicket { if !knownTicket {
log.Warnf("Unknown ticket from %s", c.ClientIP()) log.Warnf("%s: Unknown ticket from %s", funcName, c.ClientIP())
sendError(errUnknownTicket, c) sendError(errUnknownTicket, c)
return return
} }
var payFeeRequest PayFeeRequest var payFeeRequest PayFeeRequest
if err := c.ShouldBindJSON(&payFeeRequest); err != nil { if err := c.ShouldBindJSON(&payFeeRequest); err != nil {
log.Warnf("Bad payfee request from %s: %v", c.ClientIP(), err) log.Warnf("%s: Bad request from %s: %v", funcName, c.ClientIP(), err)
sendErrorWithMsg(err.Error(), errBadRequest, c) sendErrorWithMsg(err.Error(), errBadRequest, c)
return return
} }
@ -41,7 +42,7 @@ func payFee(c *gin.Context) {
if ticket.FeeTxStatus == database.FeeReceieved || if ticket.FeeTxStatus == database.FeeReceieved ||
ticket.FeeTxStatus == database.FeeBroadcast || ticket.FeeTxStatus == database.FeeBroadcast ||
ticket.FeeTxStatus == database.FeeConfirmed { ticket.FeeTxStatus == database.FeeConfirmed {
log.Warnf("Fee tx already received from %s: ticketHash=%s", c.ClientIP(), ticket.Hash) log.Warnf("%s: Fee tx already received from %s: ticketHash=%s", funcName, c.ClientIP(), ticket.Hash)
sendError(errFeeAlreadyReceived, c) sendError(errFeeAlreadyReceived, c)
return return
} }
@ -49,7 +50,7 @@ func payFee(c *gin.Context) {
// Get ticket details. // Get ticket details.
rawTicket, err := dcrdClient.GetRawTransaction(ticket.Hash) rawTicket, err := dcrdClient.GetRawTransaction(ticket.Hash)
if err != nil { if err != nil {
log.Errorf("Could not retrieve tx %s for %s: %v", ticket.Hash, c.ClientIP(), err) log.Errorf("%s: Could not retrieve tx %s for %s: %v", funcName, ticket.Hash, c.ClientIP(), err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
@ -57,19 +58,19 @@ func payFee(c *gin.Context) {
// Ensure this ticket is eligible to vote at some point in the future. // Ensure this ticket is eligible to vote at some point in the future.
canVote, err := dcrdClient.CanTicketVote(rawTicket, ticket.Hash, cfg.NetParams) canVote, err := dcrdClient.CanTicketVote(rawTicket, ticket.Hash, cfg.NetParams)
if err != nil { if err != nil {
log.Errorf("canTicketVote error: %v", err) log.Errorf("%s: canTicketVote error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
if !canVote { if !canVote {
log.Warnf("Unvotable ticket %s from %s", ticket.Hash, c.ClientIP()) log.Warnf("%s: Unvotable ticket %s from %s", funcName, ticket.Hash, c.ClientIP())
sendError(errTicketCannotVote, c) sendError(errTicketCannotVote, c)
return return
} }
// Respond early if the fee for this ticket is expired. // Respond early if the fee for this ticket is expired.
if ticket.FeeExpired() { if ticket.FeeExpired() {
log.Warnf("Expired payfee request from %s", c.ClientIP()) log.Warnf("%s: Expired payfee request from %s", funcName, c.ClientIP())
sendError(errFeeExpired, c) sendError(errFeeExpired, c)
return return
} }
@ -78,7 +79,7 @@ func payFee(c *gin.Context) {
votingKey := payFeeRequest.VotingKey votingKey := payFeeRequest.VotingKey
votingWIF, err := dcrutil.DecodeWIF(votingKey, cfg.NetParams.PrivateKeyID) votingWIF, err := dcrutil.DecodeWIF(votingKey, cfg.NetParams.PrivateKeyID)
if err != nil { if err != nil {
log.Warnf("Failed to decode WIF: %v", err) log.Warnf("%s: Failed to decode WIF: %v", funcName, err)
sendError(errInvalidPrivKey, c) sendError(errInvalidPrivKey, c)
return return
} }
@ -87,7 +88,7 @@ func payFee(c *gin.Context) {
voteChoices := payFeeRequest.VoteChoices voteChoices := payFeeRequest.VoteChoices
err = isValidVoteChoices(cfg.NetParams, currentVoteVersion(cfg.NetParams), voteChoices) err = isValidVoteChoices(cfg.NetParams, currentVoteVersion(cfg.NetParams), voteChoices)
if err != nil { if err != nil {
log.Warnf("Invalid votechoices from %s: %v", c.ClientIP(), err) log.Warnf("%s: Invalid votechoices from %s: %v", funcName, c.ClientIP(), err)
sendErrorWithMsg(err.Error(), errInvalidVoteChoices, c) sendErrorWithMsg(err.Error(), errInvalidVoteChoices, c)
return return
} }
@ -95,7 +96,7 @@ func payFee(c *gin.Context) {
// Validate FeeTx. // Validate FeeTx.
feeTx, err := decodeTransaction(payFeeRequest.FeeTx) feeTx, err := decodeTransaction(payFeeRequest.FeeTx)
if err != nil { if err != nil {
log.Warnf("Failed to decode tx: %v", err) log.Warnf("%s: Failed to decode tx: %v", funcName, err)
sendError(errInvalidFeeTx, c) sendError(errInvalidFeeTx, c)
return return
} }
@ -114,7 +115,7 @@ findAddress:
_, addresses, _, err := txscript.ExtractPkScriptAddrs(scriptVersion, _, addresses, _, err := txscript.ExtractPkScriptAddrs(scriptVersion,
txOut.PkScript, cfg.NetParams) txOut.PkScript, cfg.NetParams)
if err != nil { if err != nil {
log.Errorf("Extract PK error: %v", err) log.Errorf("%s: Extract PK error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
@ -127,7 +128,8 @@ findAddress:
} }
if feePaid == 0 { if feePaid == 0 {
log.Warnf("FeeTx for ticket %s did not include any payments for address %s", ticket.Hash, ticket.FeeAddress) log.Warnf("%s: FeeTx for ticket %s did not include any payments for address %s",
funcName, ticket.Hash, ticket.FeeAddress)
sendErrorWithMsg("feetx did not include any payments for fee address", errInvalidFeeTx, c) sendErrorWithMsg("feetx did not include any payments for fee address", errInvalidFeeTx, c)
return return
} }
@ -135,7 +137,7 @@ findAddress:
wifAddr, err := dcrutil.NewAddressPubKeyHash(dcrutil.Hash160(votingWIF.PubKey()), cfg.NetParams, wifAddr, err := dcrutil.NewAddressPubKeyHash(dcrutil.Hash160(votingWIF.PubKey()), cfg.NetParams,
dcrec.STEcdsaSecp256k1) dcrec.STEcdsaSecp256k1)
if err != nil { if err != nil {
log.Errorf("NewAddressPubKeyHash: %v", err) log.Errorf("%s: NewAddressPubKeyHash: %v", funcName, err)
sendError(errInvalidPrivKey, c) sendError(errInvalidPrivKey, c)
return return
} }
@ -143,7 +145,7 @@ findAddress:
// Decode ticket transaction to get its voting address. // Decode ticket transaction to get its voting address.
ticketTx, err := decodeTransaction(rawTicket.Hex) ticketTx, err := decodeTransaction(rawTicket.Hex)
if err != nil { if err != nil {
log.Warnf("Failed to decode tx: %v", err) log.Warnf("%s: Failed to decode tx: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
@ -151,20 +153,20 @@ findAddress:
// Get ticket voting address. // Get ticket voting address.
_, votingAddr, _, err := txscript.ExtractPkScriptAddrs(scriptVersion, ticketTx.TxOut[0].PkScript, cfg.NetParams) _, votingAddr, _, err := txscript.ExtractPkScriptAddrs(scriptVersion, ticketTx.TxOut[0].PkScript, cfg.NetParams)
if err != nil { if err != nil {
log.Errorf("ExtractPK error: %v", err) log.Errorf("%s: ExtractPK error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
if len(votingAddr) == 0 { if len(votingAddr) == 0 {
log.Error("No voting address found for ticket %s", ticket.Hash) log.Error("%s: No voting address found for ticket %s", funcName, ticket.Hash)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
// Ensure provided private key will allow us to vote this ticket. // Ensure provided private key will allow us to vote this ticket.
if votingAddr[0].Address() != wifAddr.Address() { if votingAddr[0].Address() != wifAddr.Address() {
log.Warnf("Voting address does not match provided private key: "+ log.Warnf("%s: Voting address does not match provided private key: "+
"votingAddr=%+v, wifAddr=%+v", votingAddr[0], wifAddr) "votingAddr=%+v, wifAddr=%+v", funcName, votingAddr[0], wifAddr)
sendErrorWithMsg("voting address does not match provided private key", sendErrorWithMsg("voting address does not match provided private key",
errInvalidPrivKey, c) errInvalidPrivKey, c)
return return
@ -172,7 +174,7 @@ findAddress:
minFee := dcrutil.Amount(ticket.FeeAmount) minFee := dcrutil.Amount(ticket.FeeAmount)
if feePaid < minFee { if feePaid < minFee {
log.Warnf("Fee too small from %s: was %v, expected %v", c.ClientIP(), log.Warnf("%s: Fee too small from %s: was %v, expected %v", funcName, c.ClientIP(),
feePaid, minFee) feePaid, minFee)
sendError(errFeeTooSmall, c) sendError(errFeeTooSmall, c)
return return
@ -190,24 +192,24 @@ findAddress:
err = db.UpdateTicket(ticket) err = db.UpdateTicket(ticket)
if err != nil { if err != nil {
log.Errorf("InsertTicket failed: %v", err) log.Errorf("%s: InsertTicket failed: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
log.Debugf("Fee tx received for ticket: minExpectedFee=%v, feePaid=%v, "+ log.Debugf("%s: Fee tx received for ticket: minExpectedFee=%v, feePaid=%v, "+
"ticketHash=%s", minFee, feePaid, ticket.Hash) "ticketHash=%s", funcName, minFee, feePaid, ticket.Hash)
if ticket.Confirmed { if ticket.Confirmed {
err = dcrdClient.SendRawTransaction(payFeeRequest.FeeTx) err = dcrdClient.SendRawTransaction(payFeeRequest.FeeTx)
if err != nil { if err != nil {
log.Errorf("SendRawTransaction failed: %v", err) log.Errorf("%s: SendRawTransaction failed: %v", funcName, err)
ticket.FeeTxStatus = database.FeeError ticket.FeeTxStatus = database.FeeError
err = db.UpdateTicket(ticket) err = db.UpdateTicket(ticket)
if err != nil { if err != nil {
log.Errorf("UpdateTicket error: %v", err) log.Errorf("%s: UpdateTicket error: %v", funcName, err)
} }
sendErrorWithMsg("could not broadcast fee transaction", errInvalidFeeTx, c) sendErrorWithMsg("could not broadcast fee transaction", errInvalidFeeTx, c)
@ -218,12 +220,13 @@ findAddress:
err = db.UpdateTicket(ticket) err = db.UpdateTicket(ticket)
if err != nil { if err != nil {
log.Errorf("UpdateTicket failed: %v", err) log.Errorf("%s: UpdateTicket failed: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
log.Debugf("Fee tx broadcast for ticket: ticketHash=%s, feeHash=%s", ticket.Hash, ticket.FeeTxHash) log.Debugf("%s: Fee tx broadcast for ticket: ticketHash=%s, feeHash=%s",
funcName, ticket.Hash, ticket.FeeTxHash)
} }
sendJSONResponse(payFeeResponse{ sendJSONResponse(payFeeResponse{

View File

@ -10,6 +10,7 @@ import (
// setVoteChoices is the handler for "POST /setvotechoices". // setVoteChoices is the handler for "POST /setvotechoices".
func setVoteChoices(c *gin.Context) { func setVoteChoices(c *gin.Context) {
funcName := "setVoteChoices"
// Get values which have been added to context by middleware. // Get values which have been added to context by middleware.
ticket := c.MustGet("Ticket").(database.Ticket) ticket := c.MustGet("Ticket").(database.Ticket)
@ -17,20 +18,20 @@ func setVoteChoices(c *gin.Context) {
walletClients := c.MustGet("WalletClients").([]*rpc.WalletRPC) walletClients := c.MustGet("WalletClients").([]*rpc.WalletRPC)
if !knownTicket { if !knownTicket {
log.Warnf("Unknown ticket from %s", c.ClientIP()) log.Warnf("%s: Unknown ticket from %s", funcName, c.ClientIP())
sendError(errUnknownTicket, c) sendError(errUnknownTicket, c)
return return
} }
if ticket.FeeTxStatus == database.NoFee { if ticket.FeeTxStatus == database.NoFee {
log.Warnf("Setvotechoices without fee tx from %s", c.ClientIP()) log.Warnf("%s: Setvotechoices without fee tx from %s", funcName, c.ClientIP())
sendError(errFeeNotReceived, c) sendError(errFeeNotReceived, c)
return return
} }
var setVoteChoicesRequest SetVoteChoicesRequest var setVoteChoicesRequest SetVoteChoicesRequest
if err := c.ShouldBindJSON(&setVoteChoicesRequest); err != nil { if err := c.ShouldBindJSON(&setVoteChoicesRequest); err != nil {
log.Warnf("Bad setvotechoices request from %s: %v", c.ClientIP(), err) log.Warnf("%s: Bad request from %s: %v", funcName, c.ClientIP(), err)
sendErrorWithMsg(err.Error(), errBadRequest, c) sendErrorWithMsg(err.Error(), errBadRequest, c)
return return
} }
@ -38,7 +39,7 @@ func setVoteChoices(c *gin.Context) {
voteChoices := setVoteChoicesRequest.VoteChoices voteChoices := setVoteChoicesRequest.VoteChoices
err := isValidVoteChoices(cfg.NetParams, currentVoteVersion(cfg.NetParams), voteChoices) err := isValidVoteChoices(cfg.NetParams, currentVoteVersion(cfg.NetParams), voteChoices)
if err != nil { if err != nil {
log.Warnf("Invalid votechoices from %s: %v", c.ClientIP(), err) log.Warnf("%s: Invalid votechoices from %s: %v", funcName, c.ClientIP(), err)
sendErrorWithMsg(err.Error(), errInvalidVoteChoices, c) sendErrorWithMsg(err.Error(), errInvalidVoteChoices, c)
return return
} }
@ -48,7 +49,7 @@ func setVoteChoices(c *gin.Context) {
ticket.VoteChoices = voteChoices ticket.VoteChoices = voteChoices
err = db.UpdateTicket(ticket) err = db.UpdateTicket(ticket)
if err != nil { if err != nil {
log.Errorf("UpdateTicket error: %v", err) log.Errorf("%s: UpdateTicket error: %v", funcName, err)
sendError(errInternalError, c) sendError(errInternalError, c)
return return
} }
@ -62,13 +63,13 @@ func setVoteChoices(c *gin.Context) {
if err != nil { if err != nil {
// If this fails, we still want to try the other wallets, so // If this fails, we still want to try the other wallets, so
// don't return an error response, just log an error. // don't return an error response, just log an error.
log.Errorf("SetVoteChoice failed: %v", err) log.Errorf("%s: SetVoteChoice failed: %v", funcName, err)
} }
} }
} }
} }
log.Debugf("Vote choices updated for ticket: ticketHash=%s", ticket.Hash) log.Debugf("%s: Vote choices updated for ticket: ticketHash=%s", funcName, ticket.Hash)
// TODO: DB - error if given timestamp is older than any previous requests // TODO: DB - error if given timestamp is older than any previous requests

View File

@ -9,20 +9,21 @@ import (
// ticketStatus is the handler for "GET /ticketstatus". // ticketStatus is the handler for "GET /ticketstatus".
func ticketStatus(c *gin.Context) { func ticketStatus(c *gin.Context) {
funcName := "ticketStatus"
// Get values which have been added to context by middleware. // Get values which have been added to context by middleware.
ticket := c.MustGet("Ticket").(database.Ticket) ticket := c.MustGet("Ticket").(database.Ticket)
knownTicket := c.MustGet("KnownTicket").(bool) knownTicket := c.MustGet("KnownTicket").(bool)
if !knownTicket { if !knownTicket {
log.Warnf("Unknown ticket from %s", c.ClientIP()) log.Warnf("%s: Unknown ticket from %s", funcName, c.ClientIP())
sendError(errUnknownTicket, c) sendError(errUnknownTicket, c)
return return
} }
var ticketStatusRequest TicketStatusRequest var ticketStatusRequest TicketStatusRequest
if err := c.ShouldBindJSON(&ticketStatusRequest); err != nil { if err := c.ShouldBindJSON(&ticketStatusRequest); err != nil {
log.Warnf("Bad ticketstatus request from %s: %v", c.ClientIP(), err) log.Warnf("%s: Bad request from %s: %v", funcName, c.ClientIP(), err)
sendErrorWithMsg(err.Error(), errBadRequest, c) sendErrorWithMsg(err.Error(), errBadRequest, c)
return return
} }