unknownnicks, logs: Changed unknownnicks counter to use posts instead of logs as a metric to make characters stick out more.
the build was successful
the build was successful
This commit is contained in:
@@ -130,7 +130,7 @@ func (r *mutationResolver) ImportLog(ctx context.Context, input input.LogImportI
|
|||||||
changes.Submit("Post", "add", token.UserID, true, changekeys.Many(result.Log, result.Posts), result.Posts)
|
changes.Submit("Post", "add", token.UserID, true, changekeys.Many(result.Log, result.Posts), result.Posts)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
log, err := logs.UpdateCharacters(result.Log, false)
|
log, err := logs.UpdateCharacters(result.Log, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log = result.Log
|
log = result.Log
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ func (r *mutationResolver) AddPost(ctx context.Context, input input.PostAddInput
|
|||||||
return models.Post{}, err
|
return models.Post{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
go logs.UpdateCharacters(log, false)
|
go logs.UpdateCharacters(log, nil)
|
||||||
go changes.Submit("Post", "add", token.UserID, true, changekeys.Many(log, post), post)
|
go changes.Submit("Post", "add", token.UserID, true, changekeys.Many(log, post), post)
|
||||||
|
|
||||||
return post, nil
|
return post, nil
|
||||||
@@ -83,7 +83,7 @@ func (r *mutationResolver) EditPost(ctx context.Context, input input.PostEditInp
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
logs.UpdateCharacters(log, false)
|
logs.UpdateCharacters(log, nil)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@ func (r *mutationResolver) RemovePost(ctx context.Context, input input.PostRemov
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
logs.UpdateCharacters(log, false)
|
logs.UpdateCharacters(log, nil)
|
||||||
changes.Submit("Post", "remove", token.UserID, true, changekeys.Many(log, post), post)
|
changes.Submit("Post", "remove", token.UserID, true, changekeys.Many(log, post), post)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
@@ -16,17 +16,18 @@ import (
|
|||||||
var updateTask = task.New(time.Second*60, RunFullUpdate)
|
var updateTask = task.New(time.Second*60, RunFullUpdate)
|
||||||
|
|
||||||
// UpdateCharacters updates the characters for the given log.
|
// UpdateCharacters updates the characters for the given log.
|
||||||
func UpdateCharacters(log models.Log, addUnknowns bool) (models.Log, error) {
|
func UpdateCharacters(log models.Log, unknowns map[string]int) (models.Log, error) {
|
||||||
posts, err := posts.List(&posts.Filter{LogID: &log.ShortID, Kind: []string{"action", "text", "chars"}, Limit: 0})
|
posts, err := posts.List(&posts.Filter{LogID: &log.ShortID, Kind: []string{"action", "text", "chars"}, Limit: 0})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return models.Log{}, err
|
return models.Log{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
counts := make(map[string]int)
|
||||||
added := make(map[string]bool)
|
added := make(map[string]bool)
|
||||||
removed := make(map[string]bool)
|
removed := make(map[string]bool)
|
||||||
for _, post := range posts {
|
for _, post := range posts {
|
||||||
if post.Kind == "text" || post.Kind == "action" {
|
if post.Kind == "text" || post.Kind == "action" {
|
||||||
if strings.HasPrefix(post.Text, "(") || strings.Contains(post.Nick, "(") || strings.Contains(post.Nick, "[E]") {
|
if strings.HasPrefix(post.Text, "(") || strings.Contains(post.Nick, "(") || strings.Contains(post.Nick, "[E]") || strings.HasSuffix(post.Nick, "|") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,6 +39,7 @@ func UpdateCharacters(log models.Log, addUnknowns bool) (models.Log, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
added[post.Nick] = true
|
added[post.Nick] = true
|
||||||
|
counts[post.Nick]++
|
||||||
}
|
}
|
||||||
if post.Kind == "chars" {
|
if post.Kind == "chars" {
|
||||||
tokens := strings.Fields(post.Text)
|
tokens := strings.Fields(post.Text)
|
||||||
@@ -79,7 +81,7 @@ func UpdateCharacters(log models.Log, addUnknowns bool) (models.Log, error) {
|
|||||||
|
|
||||||
log.CharacterIDs = characterIDs
|
log.CharacterIDs = characterIDs
|
||||||
|
|
||||||
if addUnknowns {
|
if len(nicks) > 0 && unknowns != nil {
|
||||||
NickLoop:
|
NickLoop:
|
||||||
for nick := range added {
|
for nick := range added {
|
||||||
if !added[nick] {
|
if !added[nick] {
|
||||||
@@ -92,7 +94,7 @@ func UpdateCharacters(log models.Log, addUnknowns bool) (models.Log, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unknownnicks.Add(nick)
|
unknowns[nick] += counts[nick]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,27 +109,22 @@ func RunFullUpdate() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = unknownnicks.BeginUpdate()
|
unknowns := make(map[string]int, 256)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
log := models.Log{}
|
log := models.Log{}
|
||||||
for iter.Next(&log) {
|
for iter.Next(&log) {
|
||||||
_, err = UpdateCharacters(log, true)
|
_, err = UpdateCharacters(log, unknowns)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
unknownnicks.CancelUpdate()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = iter.Err()
|
err = iter.Err()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
unknownnicks.CancelUpdate()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = unknownnicks.CommitUpdate()
|
err = unknownnicks.Update(unknowns)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("Failed to commit unknown nicks update: " + err.Error())
|
return errors.New("Failed to commit unknown nicks update: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,49 +1,16 @@
|
|||||||
package unknownnicks
|
package unknownnicks
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/globalsign/mgo/bson"
|
"github.com/globalsign/mgo/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
var updateMutex sync.Mutex
|
// Update updates the map, replacing it with the scores provided here.
|
||||||
var updateMap map[string]int
|
func Update(updateMap map[string]int) error {
|
||||||
|
|
||||||
// Add adds a nick as unknown.
|
|
||||||
func Add(nick string) {
|
|
||||||
updateMap[nick] = updateMap[nick] + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// BeginUpdate starts an add operation
|
|
||||||
func BeginUpdate() error {
|
|
||||||
updateMutex.Lock()
|
|
||||||
|
|
||||||
_, err := collection.RemoveAll(bson.M{})
|
_, err := collection.RemoveAll(bson.M{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
updateMutex.Unlock()
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if updateMap == nil {
|
|
||||||
updateMap = make(map[string]int)
|
|
||||||
}
|
|
||||||
|
|
||||||
for key := range updateMap {
|
|
||||||
delete(updateMap, key)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CancelUpdate cancels an add operation
|
|
||||||
func CancelUpdate() {
|
|
||||||
updateMutex.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
// CommitUpdate commits an add operation to the database.
|
|
||||||
func CommitUpdate() error {
|
|
||||||
defer updateMutex.Unlock()
|
|
||||||
|
|
||||||
for nick, score := range updateMap {
|
for nick, score := range updateMap {
|
||||||
_, err := collection.UpsertId(nick, bson.M{"$set": bson.M{"score": score}})
|
_, err := collection.UpsertId(nick, bson.M{"$set": bson.M{"score": score}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user