Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions apps/atlas/metrics_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ func GetMetricsForScaling(elapsedTime time.Duration) (*AtlasMetrics, error) {

// GetMetrics fetches all metrics for the given interval
func GetMetrics(intervalMinutes int) (*AtlasMetrics, error) {
if intervalMinutes <= 0 {
intervalMinutes = 1
}

metrics := &AtlasMetrics{}

// Fetch all metrics in parallel would be ideal, but for now we'll do sequentially
Expand Down
21 changes: 17 additions & 4 deletions lib/services/pgcr_processing/process-pgcr.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,11 @@ func parsePGCRToInstance(report *bungie.DestinyPostGameCarnageReport) (*dto.Inst

completionReason := getStat(report.Entries[0].Values, "completionReason")

activityHash := resolveInstanceActivityHash(report.ActivityDetails)

result := dto.Instance{
InstanceId: report.ActivityDetails.InstanceId,
Hash: report.ActivityDetails.DirectorActivityHash,
Hash: activityHash,
// assigned later
Fresh: nil,
DateStarted: startDate,
Expand Down Expand Up @@ -249,7 +251,7 @@ func parsePGCRToInstance(report *bungie.DestinyPostGameCarnageReport) (*dto.Inst
if err != nil {
return nil, false, err
}
result.Fresh = normalizeFresh(report.ActivityDetails.DirectorActivityHash, fresh)
result.Fresh = normalizeFresh(activityHash, fresh)

if result.Completed && deathless {
result.Flawless = result.Fresh
Expand Down Expand Up @@ -325,6 +327,16 @@ var leviHashes = map[uint32]bool{
3879860661: true, 3857338478: true,
}

// resolveInstanceActivityHash returns the activity hash to store on the instance row.
// Pantheon featured-reprise playlists report the playlist wrapper in directorActivityHash
// and the actual encounter in referenceId. For typical raids both fields match.
func resolveInstanceActivityHash(ad bungie.DestinyHistoricalStatsActivity) uint32 {
if ad.ReferenceId != 0 && ad.ReferenceId != ad.DirectorActivityHash {
return ad.ReferenceId
}
return ad.DirectorActivityHash
}
Comment thread
owens1127 marked this conversation as resolved.

// normalizeFresh adjusts unreliable Bungie fresh signals for specific activities.
func normalizeFresh(activityHash uint32, fresh *bool) *bool {
if activityHash != morgethSurpassingHash {
Expand Down Expand Up @@ -355,11 +367,12 @@ func isFresh(pgcr *bungie.DestinyPostGameCarnageReport, deathless bool) (*bool,
// Pre beyond light, using StartingPhaseIndex
result = new(bool)
startingPhaseIndex := *pgcr.StartingPhaseIndex
activityHash := resolveInstanceActivityHash(pgcr.ActivityDetails)
// sotp
if pgcr.ActivityDetails.DirectorActivityHash == 548750096 || pgcr.ActivityDetails.DirectorActivityHash == 2812525063 {
if activityHash == 548750096 || activityHash == 2812525063 {
*result = (startingPhaseIndex <= 1)
// levi
} else if leviHashes[pgcr.ActivityDetails.DirectorActivityHash] {
} else if leviHashes[activityHash] {
*result = (startingPhaseIndex == 0 || startingPhaseIndex == 2)
} else {
*result = (startingPhaseIndex == 0)
Expand Down
1 change: 1 addition & 0 deletions lib/web/bungie/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ type DestinyHistoricalStatsActivity struct {
Mode int `json:"mode"`
Modes []int `json:"modes"`
MembershipType int `json:"membershipType"`
ReferenceId uint32 `json:"referenceId"`
DirectorActivityHash uint32 `json:"directorActivityHash"`
}

Expand Down
Loading