Skip to content

Commit 4e34124

Browse files
Hongyan JiangGitHub Enterprise
authored andcommitted
Change beacon id from 128 bit UUID to 64 bit hex string
1 parent 74cee67 commit 4e34124

File tree

8 files changed

+42
-22
lines changed

8 files changed

+42
-22
lines changed

Changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Fix client side crash symbolication for arm64e architecture
55
- Fix unit test cases that failed in command line execution
66
- Fix unit test cases that failed in Xcode 15
7+
- Change beacon id from 128 bit UUID to 64 bit hex string
78

89
## 1.6.5
910
- Add crash to mobile feature list and send to Instana backend

Sources/InstanaAgent/Beacons/Beacons Types/Beacon.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Foundation
66

77
/// Base class for Beacon.
88
class Beacon: Identifiable {
9-
let id = UUID()
9+
let id = Beacon.generateUniqueIdImpl()
1010
var timestamp: Instana.Types.Milliseconds = Date().millisecondsSince1970
1111
let viewName: String?
1212

@@ -15,6 +15,17 @@ class Beacon: Identifiable {
1515
self.timestamp = timestamp
1616
self.viewName = InstanaProperties.validate(view: viewName)
1717
}
18+
19+
// A hex encoded 64 bit random ID.
20+
static func generateUniqueIdImpl() -> String {
21+
let validIdCharacters = Array("0123456789abcdef")
22+
var result: String = ""
23+
for _ in 0 ..< 16 {
24+
let idx = Int.random(in: 0 ... 15)
25+
result += String(validIdCharacters[idx])
26+
}
27+
return result
28+
}
1829
}
1930

2031
enum BeaconResult {

Sources/InstanaAgent/Beacons/CoreBeacon/CoreBeaconFactory.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ extension CoreBeacon {
183183
timestamp: Instana.Types.Milliseconds,
184184
sid: UUID,
185185
usi: UUID?,
186-
id: UUID,
186+
id: String,
187187
mobileFeatures: String?,
188188
connection: NetworkUtility.ConnectionType = InstanaSystemUtils.networkUtility.connectionType,
189189
ect: NetworkUtility.CellularType? = nil)
@@ -193,7 +193,7 @@ extension CoreBeacon {
193193
ti: String(timestamp),
194194
sid: sid.uuidString,
195195
usi: usi?.uuidString,
196-
bid: id.uuidString,
196+
bid: id,
197197
uf: mobileFeatures,
198198
bi: InstanaSystemUtils.applicationBundleIdentifier,
199199
ul: Locale.current.languageCode,

Tests/InstanaAgentTests/Beacons/Beacon Types/BeaconTests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,12 @@ class BeaconTests: InstanaTestCase {
2828
// Then
2929
AssertEqualAndNotNil(sut.viewName, given.cleanEscapeAndTruncate(at: InstanaProperties.viewMaxLength))
3030
}
31+
32+
func test_beacon_id() {
33+
// Given
34+
let beaconID = Beacon.generateUniqueIdImpl()
35+
36+
// Then
37+
AssertEqualAndNotNil(beaconID.count, 16)
38+
}
3139
}

Tests/InstanaAgentTests/Beacons/CoreBeacon/CoreBeaconTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ class CoreBeaconTests: InstanaTestCase {
1111
var coreBeacon: CoreBeacon!
1212
var wifiCoreBeacon: CoreBeacon!
1313
var timestamp: Int64!
14-
var beaconID: UUID!
14+
var beaconID: String = ""
1515

1616
override func setUp() {
1717
super.setUp()
18-
beaconID = UUID()
18+
beaconID = Beacon.generateUniqueIdImpl()
1919
timestamp = Date().millisecondsSince1970
2020

2121
user = InstanaProperties.User(id: sessionID.uuidString , email: "ex@example.com", name: "John Appleseed")
@@ -56,7 +56,7 @@ class CoreBeaconTests: InstanaTestCase {
5656
AssertEqualAndNotNil(sut.ti, String(timestamp))
5757
AssertEqualAndNotNil(sut.sid, sessionID.uuidString)
5858
XCTAssertNotNil(sut.usi)
59-
AssertEqualAndNotNil(sut.bid, beaconID.uuidString)
59+
AssertEqualAndNotNil(sut.bid, beaconID)
6060
AssertEqualAndNotNil(sut.bi, InstanaSystemUtils.applicationBundleIdentifier)
6161
AssertEqualAndNotNil(sut.uf, "c")
6262
AssertEqualAndNotNil(sut.ul, Locale.current.languageCode)

Tests/InstanaAgentTests/Beacons/ReporterTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ class ReporterTests: InstanaTestCase {
200200
// Then
201201
AssertTrue(reporter.queue.items.count == 1)
202202
AssertTrue(sendCount == 0)
203-
AssertEqualAndNotNil(reporter.queue.items.randomElement()?.bid, givenBeacon.id.uuidString)
203+
AssertEqualAndNotNil(reporter.queue.items.randomElement()?.bid, givenBeacon.id)
204204

205205
// Wait for final flush
206206
wait(for: [finalExp], timeout: 5.0)
@@ -828,7 +828,7 @@ class ReporterTests: InstanaTestCase {
828828
AssertTrue(reporter.preQueue.isEmpty)
829829
AssertTrue(expectedResult == .success)
830830
AssertTrue(sendQueue.addedItems.count == 1)
831-
AssertEqualAndNotNil(sendQueue.addedItems.first?.bid, beacon.id.uuidString)
831+
AssertEqualAndNotNil(sendQueue.addedItems.first?.bid, beacon.id)
832832
AssertEqualAndNotNil(sendQueue.addedItems.first?.v, viewName)
833833
AssertEqualAndNotNil(sendQueue.addedItems.first?.ue, "e@e.com")
834834
AssertEqualAndNotNil(sendQueue.addedItems.first?.un, "John")
@@ -872,8 +872,8 @@ class ReporterTests: InstanaTestCase {
872872
// Then
873873
AssertEqualAndNotNil(sendCount, 2) // The prequeue has been flushed only
874874
AssertTrue(sendQueue.addedItems.count == 2)
875-
AssertTrue(sendQueue.addedItems.map {$0.bid}.contains(beaconPreQueue.id.uuidString))
876-
AssertTrue(sendQueue.addedItems.map {$0.bid}.contains(beaconAfterQueue.id.uuidString))
875+
AssertTrue(sendQueue.addedItems.map {$0.bid}.contains(beaconPreQueue.id))
876+
AssertTrue(sendQueue.addedItems.map {$0.bid}.contains(beaconAfterQueue.id))
877877
AssertTrue(reporter.preQueue.isEmpty)
878878
}
879879

@@ -902,7 +902,7 @@ class ReporterTests: InstanaTestCase {
902902

903903
// Then
904904
AssertEqualAndNotNil(resultError, givenError)
905-
AssertEqualAndNotNil(reporter.queue.items.randomElement()?.bid, givenBeacon.id.uuidString)
905+
AssertEqualAndNotNil(reporter.queue.items.randomElement()?.bid, givenBeacon.id)
906906
}
907907

908908
func test_DO_NOT_remove_from_after_http_client_error() {
@@ -923,7 +923,7 @@ class ReporterTests: InstanaTestCase {
923923
wait(for: [waitForSend], timeout: 20.0)
924924

925925
// Then
926-
AssertTrue(reporter.queue.items.contains(where: {$0.bid == beacon.id.uuidString}))
926+
AssertTrue(reporter.queue.items.contains(where: {$0.bid == beacon.id}))
927927
AssertTrue(mockQueue.removedItems.isEmpty)
928928
}
929929

Tests/InstanaAgentTests/Monitors/HTTP/HTTPMarkerTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ class HTTPMarkerTests: InstanaTestCase {
287287
}
288288

289289
// Then
290-
XCTAssertTrue(beacon.id.uuidString.count > 0)
290+
XCTAssertTrue(beacon.id.count > 0)
291291
XCTAssertEqual(beacon.timestamp, marker.startTime)
292292
XCTAssertEqual(beacon.duration, 0)
293293
XCTAssertEqual(beacon.method, "c")
@@ -327,7 +327,7 @@ class HTTPMarkerTests: InstanaTestCase {
327327

328328
// Then
329329
XCTAssertEqual(beacon.viewName, viewName)
330-
XCTAssertTrue(beacon.id.uuidString.count > 0)
330+
XCTAssertTrue(beacon.id.count > 0)
331331
XCTAssertEqual(beacon.timestamp, marker.startTime)
332332
XCTAssertEqual(beacon.duration, marker.duration)
333333
XCTAssertEqual(beacon.method, "m")
@@ -352,7 +352,7 @@ class HTTPMarkerTests: InstanaTestCase {
352352
}
353353

354354
// Then
355-
XCTAssertTrue(beacon.id.uuidString.count > 0)
355+
XCTAssertTrue(beacon.id.count > 0)
356356
XCTAssertEqual(beacon.timestamp, marker.startTime)
357357
XCTAssertEqual(beacon.duration, marker.duration)
358358
XCTAssertEqual(beacon.method, "t")
@@ -377,7 +377,7 @@ class HTTPMarkerTests: InstanaTestCase {
377377
}
378378

379379
// Then
380-
XCTAssertTrue(beacon.id.uuidString.count > 0)
380+
XCTAssertTrue(beacon.id.count > 0)
381381
XCTAssertEqual(beacon.timestamp, marker.startTime)
382382
XCTAssertEqual(beacon.duration, marker.duration)
383383
XCTAssertEqual(beacon.method, "c")

Tests/InstanaAgentTests/Utils_Tests/InstanaPersistableQueueTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class InstanaPersistableQueueTests: InstanaTestCase {
4747
func test_add_Queue_ignore_dups() {
4848
// Given
4949
let sessionID = UUID()
50-
let id = UUID()
50+
let id = Beacon.generateUniqueIdImpl()
5151
let beacon1 = CoreBeacon.createDefault(viewName: "View_1", key: "Key_1", timestamp: 0,
5252
sid: sessionID, usi: session.usi, id: id, mobileFeatures: "c")
5353
let beacon2 = CoreBeacon.createDefault(viewName: "View_2", key: "Key_2", timestamp: 0,
@@ -71,15 +71,15 @@ class InstanaPersistableQueueTests: InstanaTestCase {
7171
//
7272
func test_persisted_beacons_plus_new() {
7373
// Given
74-
let oldBeacons = [CoreBeacon.createDefault(viewName: "V", key: "K", timestamp: 1,
75-
sid: UUID(), usi: session.usi, id: UUID(), mobileFeatures: "c")]
74+
let oldBeacons = [CoreBeacon.createDefault(viewName: "V", key: "K", timestamp: 1, sid: UUID(),
75+
usi: session.usi, id: Beacon.generateUniqueIdImpl(), mobileFeatures: "c")]
7676
var queueHandler = InstanaPersistableQueue<CoreBeacon>(identifier: "queue", maxItems: 100)
7777
queueHandler.removeAll()
7878
queueHandler.add(oldBeacons) {_ in}
7979

8080
// When
81-
let newBeacons = [CoreBeacon.createDefault(viewName: "V", key: "K", timestamp: 2,
82-
sid: UUID(), usi: session.usi, id: UUID(), mobileFeatures: "c")]
81+
let newBeacons = [CoreBeacon.createDefault(viewName: "V", key: "K", timestamp: 2, sid: UUID(),
82+
usi: session.usi, id: Beacon.generateUniqueIdImpl(), mobileFeatures: "c")]
8383
queueHandler = InstanaPersistableQueue<CoreBeacon>(identifier: "queue", maxItems: 100)
8484
queueHandler.add(newBeacons) {result in
8585
AssertTrue(result.error == nil)
@@ -95,7 +95,7 @@ class InstanaPersistableQueueTests: InstanaTestCase {
9595
//
9696
func test_persisted_beacons_avoid_dups() {
9797
// Given
98-
let id = UUID()
98+
let id = Beacon.generateUniqueIdImpl()
9999
let oldBeacons = [CoreBeacon.createDefault(viewName: "V", key: "K", timestamp: 1,
100100
sid: UUID(), usi: session.usi, id: id, mobileFeatures: "c")]
101101
var queueHandler = InstanaPersistableQueue<CoreBeacon>(identifier: "queue", maxItems: 100)

0 commit comments

Comments
 (0)