Added better logging

This commit is contained in:
Jonathan Barrow 2022-09-07 20:00:07 -04:00
parent 1ce5efaea2
commit 06ec0f9b71
No known key found for this signature in database
GPG Key ID: E86E9FE9049C741F
5 changed files with 78 additions and 51 deletions

View File

@ -5,7 +5,6 @@ import (
"encoding/base64"
"flag"
"fmt"
"log"
"math/rand"
"os"
"time"
@ -50,7 +49,8 @@ func connectCassandra() {
cassandraClusterSession, err = cluster.CreateSession()
if err != nil {
panic(err)
logger.Critical(err.Error())
return
}
// Create tables if missing
@ -61,7 +61,8 @@ func connectCassandra() {
show_current_game boolean,
block_friend_requests boolean
)`).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return
}
if err := cassandraClusterSession.Query(`CREATE TABLE IF NOT EXISTS pretendo_friends.blocks (
@ -70,7 +71,8 @@ func connectCassandra() {
blocked_pid int,
date bigint
)`).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return
}
if err := cassandraClusterSession.Query(`CREATE TABLE IF NOT EXISTS pretendo_friends.friend_requests (
@ -84,7 +86,8 @@ func connectCassandra() {
accepted boolean,
denied boolean
)`).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return
}
if err := cassandraClusterSession.Query(`CREATE TABLE IF NOT EXISTS pretendo_friends.friendships (
@ -93,7 +96,8 @@ func connectCassandra() {
user2_pid int,
date bigint
)`).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return
}
if err := cassandraClusterSession.Query(`CREATE TABLE IF NOT EXISTS pretendo_friends.comments (
@ -101,17 +105,19 @@ func connectCassandra() {
message text,
changed bigint
)`).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return
}
if err := cassandraClusterSession.Query(`CREATE TABLE IF NOT EXISTS pretendo_friends.last_online (
pid int PRIMARY KEY,
time bigint
)`).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return
}
fmt.Println("Connected to Cassandra")
logger.Success("Connected to db")
}
// Adapted from gocql common_test.go
@ -125,7 +131,7 @@ func createKeyspace(keyspace string) {
s, err := c.CreateSession()
if err != nil {
panic(err)
logger.Critical(err.Error())
}
defer s.Close()
@ -135,7 +141,7 @@ func createKeyspace(keyspace string) {
'class' : 'SimpleStrategy',
'replication_factor' : %d
}`, keyspace, *flagRF)).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
}
@ -147,7 +153,7 @@ func createKeyspace(keyspace string) {
func updateUserLastOnlineTime(pid uint32, lastOnline *nex.DateTime) {
if err := cassandraClusterSession.Query(`UPDATE pretendo_friends.last_online SET time=? WHERE pid=?`, lastOnline.Value(), pid).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
}
@ -163,7 +169,8 @@ func getUserComment(pid uint32) *nexproto.Comment {
if err == gocql.ErrNotFound {
comment.Contents = ""
} else {
log.Fatal(err)
comment.Contents = ""
logger.Critical(err.Error())
}
}
@ -177,7 +184,7 @@ func updateUserComment(pid uint32, message string) uint64 {
changed := nex.NewDateTime(0).Now()
if err := cassandraClusterSession.Query(`UPDATE pretendo_friends.comments SET message=?, changed=? WHERE pid=?`, message, changed, pid).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
return changed
@ -189,7 +196,9 @@ func getUserFriendList(pid uint32) []*nexproto.FriendInfo {
var err error
if sliceMap, err = cassandraClusterSession.Query(`SELECT user2_pid, date FROM pretendo_friends.friendships WHERE user1_pid=? ALLOW FILTERING`, pid).Iter().SliceMap(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return make([]*nexproto.FriendInfo, 0)
}
friendList := make([]*nexproto.FriendInfo, 0)
@ -208,13 +217,12 @@ func getUserFriendList(pid uint32) []*nexproto.FriendInfo {
if friendInfo.NNAInfo == nil || friendInfo.NNAInfo.PrincipalBasicInfo == nil {
// TODO: Fix this
fmt.Printf("\nPID %d has friend with bad presence data database.go line 211\n", pid)
logger.Error(fmt.Sprintf("User %d has friend %d with bad presence data", pid, friendPID))
if friendInfo.NNAInfo == nil {
fmt.Println("friendInfo.NNAInfo is nil")
logger.Error(fmt.Sprintf("%d friendInfo.NNAInfo is nil", friendPID))
} else {
fmt.Println("friendInfo.NNAInfo.PrincipalBasicInfo is nil")
logger.Error(fmt.Sprintf("%d friendInfo.NNAInfo.PrincipalBasicInfo is nil", friendPID))
}
fmt.Printf("Bad friend PID: %d\n\n", friendPID)
continue
}
@ -265,7 +273,8 @@ func getUserFriendList(pid uint32) []*nexproto.FriendInfo {
if err == gocql.ErrNotFound {
lastOnlineTime = nex.NewDateTime(0).Now()
} else {
log.Fatal(err)
logger.Critical(err.Error())
lastOnlineTime = nex.NewDateTime(0).Now()
}
}
@ -289,7 +298,9 @@ func getUserFriendRequestsOut(pid uint32) []*nexproto.FriendRequest {
var err error
if sliceMap, err = cassandraClusterSession.Query(`SELECT id, recipient_pid, sent_on, expires_on, message, received FROM pretendo_friends.friend_requests WHERE sender_pid=? AND accepted=false AND denied=false ALLOW FILTERING`, pid).Iter().SliceMap(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return make([]*nexproto.FriendRequest, 0)
}
friendRequestsOut := make([]*nexproto.FriendRequest, 0)
@ -340,7 +351,8 @@ func getUserFriendRequestsIn(pid uint32) []*nexproto.FriendRequest {
var err error
if sliceMap, err = cassandraClusterSession.Query(`SELECT id, sender_pid, sent_on, expires_on, message, received FROM pretendo_friends.friend_requests WHERE recipient_pid=? AND accepted=false AND denied=false ALLOW FILTERING`, pid).Iter().SliceMap(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return make([]*nexproto.FriendRequest, 0)
}
friendRequestsOut := make([]*nexproto.FriendRequest, 0)
@ -401,7 +413,7 @@ func updateUserPrincipalPreference(pid uint32, principalPreference *nexproto.Pri
show_current_game=?,
block_friend_requests=?
WHERE pid=?`, principalPreference.ShowOnlinePresence, principalPreference.ShowCurrentTitle, principalPreference.BlockFriendRequests, pid).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
}
@ -429,19 +441,19 @@ func isFriendRequestBlocked(requesterPID uint32, requestedPID uint32) bool {
func saveFriendRequest(friendRequestID uint64, senderPID uint32, recipientPID uint32, sentTime uint64, expireTime uint64, message string) {
if err := cassandraClusterSession.Query(`INSERT INTO pretendo_friends.friend_requests (id, sender_pid, recipient_pid, sent_on, expires_on, message, received, accepted, denied) VALUES (?, ?, ?, ?, ?, ?, false, false, false) IF NOT EXISTS`, friendRequestID, senderPID, recipientPID, sentTime, expireTime, message).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
}
func setFriendRequestReceived(friendRequestID uint64) {
if err := cassandraClusterSession.Query(`UPDATE pretendo_friends.friend_requests SET received=true WHERE id=?`, friendRequestID).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
}
func setFriendRequestAccepted(friendRequestID uint64) {
if err := cassandraClusterSession.Query(`UPDATE pretendo_friends.friend_requests SET accepted=true WHERE id=?`, friendRequestID).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
}
}
@ -450,7 +462,8 @@ func acceptFriendshipAndReturnFriendInfo(friendRequestID uint64) *nexproto.Frien
var recipientPID uint32
if err := cassandraClusterSession.Query(`SELECT sender_pid, recipient_pid FROM pretendo_friends.friend_requests WHERE id=?`, friendRequestID).Scan(&senderPID, &recipientPID); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return nil
}
rand.Seed(time.Now().UnixNano())
@ -468,11 +481,13 @@ func acceptFriendshipAndReturnFriendInfo(friendRequestID uint64) *nexproto.Frien
// "A" has friend "B" and "B" has friend "A", so store both relationships
if err := cassandraClusterSession.Query(`INSERT INTO pretendo_friends.friendships (id, user1_pid, user2_pid, date) VALUES (?, ?, ?, ?) IF NOT EXISTS`, friendshipID1, senderPID, recipientPID, acceptedTime.Value()).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return nil
}
if err := cassandraClusterSession.Query(`INSERT INTO pretendo_friends.friendships (id, user1_pid, user2_pid, date) VALUES (?, ?, ?, ?) IF NOT EXISTS`, friendshipID2, recipientPID, senderPID, acceptedTime.Value()).Exec(); err != nil {
log.Fatal(err)
logger.Critical(err.Error())
return nil
}
setFriendRequestAccepted(friendRequestID)
@ -532,7 +547,8 @@ func acceptFriendshipAndReturnFriendInfo(friendRequestID uint64) *nexproto.Frien
if err == gocql.ErrNotFound {
lastOnlineTime = nex.NewDateTime(0).Now()
} else {
log.Fatal(err)
logger.Critical(err.Error())
lastOnlineTime = nex.NewDateTime(0).Now()
}
}
@ -563,7 +579,7 @@ func getUserInfoByPID(pid uint32) bson.M {
return nil
}
panic(err)
logger.Critical(err.Error())
}
return result

16
init.go
View File

@ -2,17 +2,19 @@ package main
import (
"crypto/rsa"
"fmt"
"io/ioutil"
"log"
"runtime"
"github.com/PretendoNetwork/nex-go"
nexproto "github.com/PretendoNetwork/nex-protocols-go"
"github.com/PretendoNetwork/plogger-go"
"github.com/bwmarrin/snowflake"
"github.com/joho/godotenv"
)
var logger = plogger.NewLogger()
/*
type Config struct {
Mongo struct {
@ -54,17 +56,20 @@ func init() {
rsaPrivateKeyBytes, err = ioutil.ReadFile("private.pem")
if err != nil {
panic(err)
// TODO: Handle error
logger.Critical(err.Error())
}
rsaPrivateKey, err = parseRsaPrivateKey(rsaPrivateKeyBytes)
if err != nil {
panic(err)
// TODO: Handle error
logger.Critical(err.Error())
}
hmacSecret, err = ioutil.ReadFile("secret.key")
if err != nil {
panic(err)
// TODO: Handle error
logger.Critical(err.Error())
}
err = godotenv.Load()
@ -83,7 +88,8 @@ func createSnowflakeNodes() {
for corenum := 0; corenum < runtime.NumCPU(); corenum++ {
node, err := snowflake.NewNode(int64(corenum))
if err != nil {
fmt.Println(err)
// TODO: Handle error
logger.Critical(err.Error())
return
}
snowflakeNodes = append(snowflakeNodes, node)

View File

@ -14,7 +14,8 @@ import (
func nintendoCreateAccount(err error, client *nex.Client, callID uint32, strPrincipalName string, strKey string, uiGroups uint32, strEmail string, oAuthData *nex.DataHolder) {
if err != nil {
panic(err)
// TODO: Handle error
logger.Critical(err.Error())
}
var tokenBase64 string
@ -38,7 +39,8 @@ func nintendoCreateAccount(err error, client *nex.Client, callID uint32, strPrin
decryptedToken, err := decryptToken(encryptedToken)
if err != nil {
panic(err)
// TODO: Handle error
logger.Critical(err.Error())
}
pid := decryptedToken.UserPID

View File

@ -11,7 +11,7 @@ func updateAndGetAllInformation(err error, client *nex.Client, callID uint32, nn
if err != nil {
// TODO: Handle error
panic(err)
logger.Critical(err.Error())
}
// Update user information

View File

@ -59,22 +59,25 @@ func sendUpdatePresenceWiiUNotifications(presence *nexproto.NintendoPresenceV2)
for i := 0; i < len(friendList); i++ {
if friendList[i] == nil || friendList[i].NNAInfo == nil || friendList[i].NNAInfo.PrincipalBasicInfo == nil {
// TODO: Fix this
fmt.Printf("\nPID %d has friend with bad presence data update_presence_wiiu.go line 62\n", presence.PID)
pid := presence.PID
var friendPID uint32 = 0
if friendList[i] != nil && friendList[i].Presence != nil {
// TODO: Better track the bad users PID
friendPID = friendList[i].Presence.PID
}
logger.Error(fmt.Sprintf("User %d has friend %d with bad presence data", pid, friendPID))
if friendList[i] == nil {
fmt.Println("FriendInfo is nil")
logger.Error(fmt.Sprintf("%d friendList[i] nil", friendPID))
} else if friendList[i].NNAInfo == nil {
logger.Error(fmt.Sprintf("%d friendList[i].NNAInfo is nil", friendPID))
} else if friendList[i].NNAInfo.PrincipalBasicInfo == nil {
fmt.Println("friendList[i].NNAInfo is nil?")
} else {
fmt.Println("friendList[i].NNAInfo.PrincipalBasicInfo is nil")
logger.Error(fmt.Sprintf("%d friendList[i].NNAInfo.PrincipalBasicInfo is nil", friendPID))
}
if friendList[i].Presence != nil {
fmt.Printf("Bad friend PID: %d\n\n", friendList[i].Presence.PID)
} else {
fmt.Printf("Bad friend PID unknown...\n\n")
}
return
continue
}
friendPID := friendList[i].NNAInfo.PrincipalBasicInfo.PID