mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(trace): trace full snapshot of context workspace on changes
This commit is contained in:
@@ -103,7 +103,7 @@ class ContextWorkspace {
|
|||||||
* @param contextBlock 注册的新上下文块
|
* @param contextBlock 注册的新上下文块
|
||||||
*/
|
*/
|
||||||
fun register(contextBlock: ContextBlock) = lock.write {
|
fun register(contextBlock: ContextBlock) = lock.write {
|
||||||
val removedBlocks = mutableListOf<ContextBlock>()
|
val changedSourceKeys = linkedSetOf<ContextBlock.SourceKey>()
|
||||||
val iterator = stateSet.iterator()
|
val iterator = stateSet.iterator()
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
val currentBlock = iterator.next()
|
val currentBlock = iterator.next()
|
||||||
@@ -113,44 +113,44 @@ class ContextWorkspace {
|
|||||||
|
|
||||||
if (currentBlock.applyReplaceFade() <= 0.0) {
|
if (currentBlock.applyReplaceFade() <= 0.0) {
|
||||||
iterator.remove()
|
iterator.remove()
|
||||||
removedBlocks.add(currentBlock)
|
changedSourceKeys.add(currentBlock.sourceKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stateSet += contextBlock
|
stateSet += contextBlock
|
||||||
recordRegister(contextBlock, removedBlocks)
|
changedSourceKeys.add(contextBlock.sourceKey)
|
||||||
|
record("register", changedSourceKeys)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun expire(blockName: String, source: String) = lock.write {
|
fun expire(blockName: String, source: String) = lock.write {
|
||||||
val sourceKey = ContextBlock.SourceKey(blockName, source)
|
val sourceKey = ContextBlock.SourceKey(blockName, source)
|
||||||
val removedBlocks = mutableListOf<ContextBlock>()
|
val changedSourceKeys = linkedSetOf<ContextBlock.SourceKey>()
|
||||||
val iterator = stateSet.iterator()
|
val iterator = stateSet.iterator()
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
val block = iterator.next()
|
val block = iterator.next()
|
||||||
if (block.sourceKey == sourceKey) {
|
if (block.sourceKey == sourceKey) {
|
||||||
iterator.remove()
|
iterator.remove()
|
||||||
removedBlocks.add(block)
|
changedSourceKeys.add(block.sourceKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (removedBlocks.isNotEmpty()) {
|
if (changedSourceKeys.isNotEmpty()) {
|
||||||
recordExpire(sourceKey)
|
record("expire", changedSourceKeys)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun recordRegister(addedBlock: ContextBlock, removedBlocks: List<ContextBlock>) {
|
private fun record(action: String, changedSourceKeys: Set<ContextBlock.SourceKey>) {
|
||||||
val payload = JSONObject()
|
val payload = JSONObject()
|
||||||
payload["action"] = "register"
|
payload["action"] = action
|
||||||
payload["added"] = blockSnapshot(addedBlock)
|
payload["changedSourceKeys"] = changedSourceKeys
|
||||||
payload["removed"] = removedBlocks.map(::blockSnapshot)
|
.sortedWith(
|
||||||
TraceRecorder.record(TraceEvent(tracePath, payload))
|
compareBy<ContextBlock.SourceKey> { it.blockName }
|
||||||
}
|
.thenBy { it.source }
|
||||||
|
)
|
||||||
private fun recordExpire(sourceKey: ContextBlock.SourceKey) {
|
.map { sourceKey ->
|
||||||
val payload = JSONObject()
|
JSONObject.of(
|
||||||
payload["action"] = "expire"
|
"blockName", sourceKey.blockName,
|
||||||
payload["changedSourceKey"] = JSONObject.of(
|
"source", sourceKey.source
|
||||||
"blockName", sourceKey.blockName,
|
)
|
||||||
"source", sourceKey.source
|
}
|
||||||
)
|
|
||||||
payload["blocks"] = stateSet
|
payload["blocks"] = stateSet
|
||||||
.sortedWith(
|
.sortedWith(
|
||||||
compareBy<ContextBlock> { it.sourceKey.blockName }
|
compareBy<ContextBlock> { it.sourceKey.blockName }
|
||||||
|
|||||||
Reference in New Issue
Block a user