diff --git a/cmd/internal/app_store_connect/main.go b/cmd/internal/app_store_connect/main.go index 97919521..d415abd6 100644 --- a/cmd/internal/app_store_connect/main.go +++ b/cmd/internal/app_store_connect/main.go @@ -148,6 +148,7 @@ func publishTestflight(ctx context.Context) error { return err } build := builds.Data[0] + log.Info(string(platform), " ", tag, " found build: ", build.ID, " (", *build.Attributes.Version, ")") if !waitingForProcess && (common.Contains(buildIDs, build.ID) || time.Since(build.Attributes.UploadedDate.Time) > 30*time.Minute) { log.Info(string(platform), " ", tag, " waiting for process") time.Sleep(15 * time.Second) diff --git a/daemon/started_service.go b/daemon/started_service.go index 862b9920..a42a752d 100644 --- a/daemon/started_service.go +++ b/daemon/started_service.go @@ -831,7 +831,7 @@ func (s *StartedService) applyConnectionEvent(event trafficontrol.ConnectionEven func (s *StartedService) buildTrafficUpdates(manager *trafficontrol.Manager, snapshots map[uuid.UUID]connectionSnapshot) []*ConnectionEvent { activeConnections := manager.Connections() - activeIndex := make(map[uuid.UUID]trafficontrol.TrackerMetadata, len(activeConnections)) + activeIndex := make(map[uuid.UUID]*trafficontrol.TrackerMetadata, len(activeConnections)) var events []*ConnectionEvent for _, metadata := range activeConnections { @@ -854,18 +854,25 @@ func (s *StartedService) buildTrafficUpdates(manager *trafficontrol.Manager, sna uplinkDelta := currentUpload - snapshot.uplink downlinkDelta := currentDownload - snapshot.downlink if uplinkDelta < 0 || downlinkDelta < 0 { - snapshots[metadata.ID] = connectionSnapshot{ - uplink: currentUpload, - downlink: currentDownload, + if snapshot.hadTraffic { + events = append(events, &ConnectionEvent{ + Type: ConnectionEventType_CONNECTION_EVENT_UPDATE, + Id: metadata.ID.String(), + UplinkDelta: 0, + DownlinkDelta: 0, + }) } + snapshot.uplink = currentUpload + snapshot.downlink = currentDownload + snapshot.hadTraffic = false + snapshots[metadata.ID] = snapshot continue } if uplinkDelta > 0 || downlinkDelta > 0 { - snapshots[metadata.ID] = connectionSnapshot{ - uplink: currentUpload, - downlink: currentDownload, - hadTraffic: true, - } + snapshot.uplink = currentUpload + snapshot.downlink = currentDownload + snapshot.hadTraffic = true + snapshots[metadata.ID] = snapshot events = append(events, &ConnectionEvent{ Type: ConnectionEventType_CONNECTION_EVENT_UPDATE, Id: metadata.ID.String(), @@ -875,10 +882,10 @@ func (s *StartedService) buildTrafficUpdates(manager *trafficontrol.Manager, sna continue } if snapshot.hadTraffic { - snapshots[metadata.ID] = connectionSnapshot{ - uplink: currentUpload, - downlink: currentDownload, - } + snapshot.uplink = currentUpload + snapshot.downlink = currentDownload + snapshot.hadTraffic = false + snapshots[metadata.ID] = snapshot events = append(events, &ConnectionEvent{ Type: ConnectionEventType_CONNECTION_EVENT_UPDATE, Id: metadata.ID.String(), @@ -888,13 +895,13 @@ func (s *StartedService) buildTrafficUpdates(manager *trafficontrol.Manager, sna } } - var closedIndex map[uuid.UUID]trafficontrol.TrackerMetadata + var closedIndex map[uuid.UUID]*trafficontrol.TrackerMetadata for id := range snapshots { if _, exists := activeIndex[id]; exists { continue } if closedIndex == nil { - closedIndex = make(map[uuid.UUID]trafficontrol.TrackerMetadata) + closedIndex = make(map[uuid.UUID]*trafficontrol.TrackerMetadata) for _, metadata := range manager.ClosedConnections() { closedIndex[metadata.ID] = metadata } @@ -920,7 +927,7 @@ func (s *StartedService) buildTrafficUpdates(manager *trafficontrol.Manager, sna return events } -func buildConnectionProto(metadata trafficontrol.TrackerMetadata) *Connection { +func buildConnectionProto(metadata *trafficontrol.TrackerMetadata) *Connection { var rule string if metadata.Rule != nil { rule = metadata.Rule.String() diff --git a/experimental/clashapi/trafficontrol/manager.go b/experimental/clashapi/trafficontrol/manager.go index 45781c51..7bc8c347 100644 --- a/experimental/clashapi/trafficontrol/manager.go +++ b/experimental/clashapi/trafficontrol/manager.go @@ -27,7 +27,7 @@ const ( type ConnectionEvent struct { Type ConnectionEventType ID uuid.UUID - Metadata TrackerMetadata + Metadata *TrackerMetadata UplinkDelta int64 DownlinkDelta int64 ClosedAt time.Time @@ -39,7 +39,7 @@ type Manager struct { connections compatible.Map[uuid.UUID, Tracker] closedConnectionsAccess sync.Mutex - closedConnections list.List[TrackerMetadata] + closedConnections list.List[*TrackerMetadata] memory uint64 eventSubscriber *observable.Subscriber[ConnectionEvent] @@ -103,8 +103,8 @@ func (m *Manager) ConnectionsLen() int { return m.connections.Len() } -func (m *Manager) Connections() []TrackerMetadata { - var connections []TrackerMetadata +func (m *Manager) Connections() []*TrackerMetadata { + var connections []*TrackerMetadata m.connections.Range(func(_ uuid.UUID, value Tracker) bool { connections = append(connections, value.Metadata()) return true @@ -112,7 +112,7 @@ func (m *Manager) Connections() []TrackerMetadata { return connections } -func (m *Manager) ClosedConnections() []TrackerMetadata { +func (m *Manager) ClosedConnections() []*TrackerMetadata { m.closedConnectionsAccess.Lock() defer m.closedConnectionsAccess.Unlock() return m.closedConnections.Array() @@ -163,7 +163,7 @@ func (s *Snapshot) MarshalJSON() ([]byte, error) { return json.Marshal(map[string]any{ "downloadTotal": s.Download, "uploadTotal": s.Upload, - "connections": common.Map(s.Connections, func(t Tracker) TrackerMetadata { return t.Metadata() }), + "connections": common.Map(s.Connections, func(t Tracker) *TrackerMetadata { return t.Metadata() }), "memory": s.Memory, }) } diff --git a/experimental/clashapi/trafficontrol/tracker.go b/experimental/clashapi/trafficontrol/tracker.go index 9cddc8cc..23500cd0 100644 --- a/experimental/clashapi/trafficontrol/tracker.go +++ b/experimental/clashapi/trafficontrol/tracker.go @@ -87,7 +87,7 @@ func (t TrackerMetadata) MarshalJSON() ([]byte, error) { } type Tracker interface { - Metadata() TrackerMetadata + Metadata() *TrackerMetadata Close() error } @@ -97,8 +97,8 @@ type TCPConn struct { manager *Manager } -func (tt *TCPConn) Metadata() TrackerMetadata { - return tt.metadata +func (tt *TCPConn) Metadata() *TrackerMetadata { + return &tt.metadata } func (tt *TCPConn) Close() error { @@ -178,8 +178,8 @@ type UDPConn struct { manager *Manager } -func (ut *UDPConn) Metadata() TrackerMetadata { - return ut.metadata +func (ut *UDPConn) Metadata() *TrackerMetadata { + return &ut.metadata } func (ut *UDPConn) Close() error {