{"id":22342733,"url":"https://github.com/aircloud/monitor-rx","last_synced_at":"2025-03-26T09:42:30.647Z","repository":{"id":52065122,"uuid":"153905255","full_name":"aircloud/monitor-rx","owner":"aircloud","description":"A Rx.js workflow for monitor system","archived":false,"fork":false,"pushed_at":"2023-03-02T10:49:49.000Z","size":209,"stargazers_count":2,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-31T11:14:08.472Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aircloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-20T12:52:12.000Z","updated_at":"2022-08-06T15:47:35.000Z","dependencies_parsed_at":"2023-01-22T22:31:23.811Z","dependency_job_id":null,"html_url":"https://github.com/aircloud/monitor-rx","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aircloud%2Fmonitor-rx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aircloud%2Fmonitor-rx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aircloud%2Fmonitor-rx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aircloud%2Fmonitor-rx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aircloud","download_url":"https://codeload.github.com/aircloud/monitor-rx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245630983,"owners_count":20647173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-04T08:13:31.283Z","updated_at":"2025-03-26T09:42:30.625Z","avatar_url":"https://github.com/aircloud.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e2019.06.22 补充评论：这种方案由于还要维护很多函数句柄，实际上不是最优的方案。\n\n## Monitor-RX Workflow\n\n使用前需要了解 [Rx.js](https://cn.rx.js.org/) 以及其 [Observable](https://cn.rx.js.org/class/es6/Observable.js~Observable.html)。\n\n[example](https://github.com/aircloud/monitor-rx/tree/master/example) | [解决的问题](http://niexiaotao.cn/2018/10/21/%E4%BD%BF%E7%94%A8%20Node.js%20%E6%89%93%E9%80%A0%E5%A4%9A%E7%94%A8%E6%88%B7%E5%AE%9E%E6%97%B6%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F/)\n\n## 基本使用：\n\n```javascript\nconst monitorRx = require('monitor-rx');\n\nconst RxModules = {/*你的 Observable 实例集合*/};\n\nlet monitorServer = new monitorRx.Server({ RxModules });\n\nlet queryItem = {\n    id: 'ThisIsAnUniqueId',\n    module: 'ModuleName',\n    func: 'FuncName',\n    args: ['arg1','arg2'],\n    opts: {interval:1000},\n};\n\nmonitorServer.sub(queryItem, {\n    next: x =\u003e {\n        // Handle the result: X\n    },\n});\n\nsetTimeout(() =\u003e {\n    monitorServer.unSub(queryItem.id);\n}, 2400);\n```\n\nMonitor-RX 是一个基于 Rx.js 的多用户监控系统解决方案，可以进行资源复用和管理。\n\n### Observable 生成器\n\n上面的 RxModules 是一个 Observable 生成器集合对象，其每一个键名为 Observable 生成器名，而值为对应的 Observable 生成器函数，其可以返回一个 Observable 实例。\n\n如果是一个无依赖的定时任务，我们可以通过 monitor-rx 提供的 `convertToRx` 或 `convertToSimpleRx` 转换成 Observable 生成函数，例如：\n\n```\nvar os = require('os');\nvar process = require('process');\nconst monitorRx = require('monitor-rx');\n\nfunction getMemoryInfo() {\n    return process.memoryUsage();\n}\n\nconst memory = monitorRx.Utils.convertToSimpleRx(getMemoryInfo)\n\n// 或者\n//const memory = monitorRx.Utils.convertToRx({\n//    getMemoryInfo\n//});\n\nmodule.exports = memory;\n```\nconvertToRx 相比于 convertToSimpleRx，可以支持函数配置注入（即下文中 opts 的 func 属性和 args 属性）,可以在具体生成 Observable 实例的时候具体指定使用哪些函数以及其参数。\n\n而如果我们自定义 Observable，我们可以参考我们例子中的 [cpu监控函数](https://github.com/aircloud/monitor-rx/blob/master/example/server/lib/cpu.js)，其接受三个参数：\n\n```javascript\nfunction yourObservableCreator(RX, Operators, opts = {}) {\n     return RX.Observable.create(function (observer) {\n        // your Observable Creator logic\n     });\n}\n```\n\nRX 和 Operators 即 `rxjs` 以及其操作符，这里作为参数传入是为了方便使用，opts 中有两部分内容：\n\n* monitor-rx 会注入一个 funcs 属性，是一个函数名以及其参数的 Map 实例，\n* 其他调用端定义的 opts 属性会跟随传入。\n\n### queryItem\n\nqueryItem 包含了我们订阅一个 Observable 实例的信息，其 id 和 module 属性是必须的（一个用户应该只有一个 id，用于取消订阅的时候传入，以及进行用户管理），func 和 args 则是监控过程中需要调用的函数，我们也可以通过 agrs 传入用户个人信息。于没有内部子函数调用的监控，二者为空即可，opts 是一些其他可选项，比如定义请求间隔等，会传入到 Observable 生成函数的 opts 中。\n\n## 更多内容\n\nMonitor-RX 目前正在持续完善中，API 和 文档等正在进行完善，如果你遇到过和我[相似的问题](http://niexiaotao.cn/2018/10/21/%E4%BD%BF%E7%94%A8%20Node.js%20%E6%89%93%E9%80%A0%E5%A4%9A%E7%94%A8%E6%88%B7%E5%AE%9E%E6%97%B6%E7%9B%91%E6%8E%A7%E7%B3%BB%E7%BB%9F/)，欢迎你一起[讨论](https://github.com/aircloud/monitor-rx/issues)或者参与 Monitor-RX 的建设中\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faircloud%2Fmonitor-rx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faircloud%2Fmonitor-rx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faircloud%2Fmonitor-rx/lists"}