-
Notifications
You must be signed in to change notification settings - Fork 10
/
structure.go
82 lines (70 loc) · 2.33 KB
/
structure.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package hammer
import (
"context"
"fmt"
"log"
"strings"
"github.com/antihax/evedata/internal/datapackages"
"github.com/antihax/goesi"
)
func init() {
//registerConsumer("structure", structureConsumer)
//registerConsumer("characterStructures", characterStructuresConsumer)
}
func structureConsumer(s *Hammer, parameter interface{}) {
structureID := parameter.(int64)
if s.inQueue.CheckWorkExpired("evedata_structure_failure", structureID) {
return
}
ctx := context.WithValue(context.Background(), goesi.ContextOAuth2, *s.token)
structure, _, err := s.esi.ESI.UniverseApi.GetUniverseStructuresStructureId(ctx, structureID, nil)
if err != nil {
if strings.Contains(err.Error(), "403") {
s.inQueue.SetWorkExpire("evedata_structure_failure", structureID, 86400)
}
log.Println(err)
return
}
// Send out the result
err = s.QueueResult(&datapackages.Structure{Structure: structure, StructureID: structureID}, "structure")
if err != nil {
log.Println(err)
return
}
}
// Handle character structures separately since they should remain private
func characterStructuresConsumer(s *Hammer, parameter interface{}) {
parameters := parameter.([]interface{})
characterID := int32(parameters[0].(int))
tokenCharacterID := int32(parameters[1].(int))
structureID := parameters[2].(int64)
if s.inQueue.CheckWorkExpired("evedata_structurechar_failure",
fmt.Sprintf("%d%d", structureID, tokenCharacterID)) {
log.Printf("failed structure ignored %d\n", structureID)
return
}
ctx, err := s.GetTokenSourceContext(context.Background(), characterID, tokenCharacterID)
if err != nil {
log.Println(err)
return
}
// [TODO] tick failure to database
structure, r, err := s.esi.ESI.UniverseApi.GetUniverseStructuresStructureId(ctx, structureID, nil)
if err != nil {
s.tokenStore.CheckSSOError(characterID, tokenCharacterID, err)
if r != nil && r.StatusCode == 403 {
err := s.inQueue.SetWorkExpire("evedata_structurechar_failure", fmt.Sprintf("%d%d", structureID, tokenCharacterID), 86400*3)
if err != nil {
log.Printf("failed setting failure: %s %d\n", err, structureID)
}
}
log.Println(err)
return
}
// Send out the result
err = s.QueueResult(&datapackages.CharacterStructure{Structure: structure, StructureID: structureID, CharacterID: tokenCharacterID}, "characterStructure")
if err != nil {
log.Println(err)
return
}
}