Orisumi

Local Application

某台设备上的一个应用安装

本机应用表示某台设备上的一个应用安装,例如这台 Mac 上的 VS Code。它有自己的 EntityId,可以在任何观测之前就存在。前台应用时段通过 localApplicationVersionId 引用它。

粒度

一个实体对应某台设备上的一个安装。识别安装靠平台提供的标识线索;同名的应用、不同设备上的同一款软件,都是不同的实体。

身份

在 macOS 上,前台状态 Observer 按应用包标识和可执行文件路径的原始值识别安装:两者都相同,就复用原来的身份。比较区分大小写,名称、路径别名和软件品牌都不参与判断。

变化身份
应用名称变化复用;新名称保存在观测内容中
应用退出后重新启动复用
前台状态 Observer 重启或升级复用,身份来自登记文件
应用原地升级复用
在原路径卸载后重装,包标识相同复用
应用移动,或可执行文件路径变化新建
同一路径出现不同的包标识新建
先只读到路径,之后读到包标识新建
另一台设备上的相同安装新建
用户删除了这个本机应用新建,更新登记文件

读不到可执行文件路径时,只在前台状态 Observer 本次运行期间,按进程号、进程启动时间和包标识复用一个临时身份;进程或前台状态 Observer 重启后新建。连进程线索也读不到时,每次读数都新建身份。这些进程线索只用于识别,不写入业务实体。

识别时宁可多建身份。名称会随语言和版本变化,两个不同的安装也可能同名;多出来的身份之后可以由业务关联,错误合并的身份却无法拆开。

登记文件

本机应用的登记文件保存原生线索到 EntityId 的映射,是这一映射的权威来源。它与程序实例的身份文件分开,同一设备上的多个程序实例共用一个登记文件。

  • 登记文件只属于创建它的设备。
  • 文件损坏时,前台状态 Observer 报告错误并保留原文件。
  • 删除文件后,下次采集重新分配身份。
  • 创建和更新文件时使用互斥锁和原子替换。

文件路径和启动参数见 src/Observers/Orisumi.Observer.ForegroundState/README.md。

引用

本机应用没有引用。不同设备上的本机应用可以关联到同一个跨平台应用,例如两台 Mac 上的 VS Code;目前前台状态 Observer 只维护本机的身份,Device 实体和跨平台应用的归并都还没有定义。

事实时间

本机应用是被观测内容引用的对象,本身不作为观测内容,没有事实时间。应用在前台的时间由引用它的前台时段 Observation 表达。

EntitySchema

项目值
SchemaId019e1bbb-ec00-7000-8000-000000000002
显示名称本机应用
说明表示某台设备上的一个应用安装,保存用于识别安装的平台标识线索。
资源名local-applications
字段类型必填可空含义
identifiersarray是否平台标识线索,顺序无意义;没有线索时为 []
identifiers[].schemestring是否线索的种类
identifiers[].valuestring是否线索的原始值
schemevalue
macos.bundle-id应用包标识
macos.executable-path可执行文件路径

应用名称保存在观测内容中,本机应用只保存标识线索。

示例

首次读到 VS Code 时,POST /versions 中的本机应用首版。schemaVersionId 是本机应用 EntitySchema 的一个 Schema 版本:

POST /versions
{
  "versions": [
    {
      "entityId": "01a12e31-9050-7000-8000-000000000001",
      "versionId": "01a12e31-9050-7000-8000-000000000101",
      "previousVersionId": null,
      "category": "business",
      "schemaVersionId": "019e1bbb-ec00-7000-8000-000000000102",
      "content": {
        "identifiers": [
          { "scheme": "macos.bundle-id", "value": "com.microsoft.VSCode" },
          {
            "scheme": "macos.executable-path",
            "value": "/Applications/Visual Studio Code.app/Contents/MacOS/Electron"
          }
        ]
      }
    }
  ]
}

待定

  • 跨平台应用的关联由谁维护、依据什么、保存在哪里。

贡献者

页面历史