{"id":16543245,"url":"https://github.com/codemation/easycharts","last_synced_at":"2025-03-21T10:31:28.964Z","repository":{"id":57425010,"uuid":"378109892","full_name":"codemation/easycharts","owner":"codemation","description":"Easily create data visualization of static or streaming data","archived":false,"fork":false,"pushed_at":"2021-10-09T08:06:42.000Z","size":451,"stargazers_count":22,"open_issues_count":4,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-01T05:12:05.617Z","etag":null,"topics":["data-visualization","easy","fastapi","graphs","monitoring"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codemation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-18T10:07:59.000Z","updated_at":"2025-02-11T03:14:05.000Z","dependencies_parsed_at":"2022-09-13T15:23:52.704Z","dependency_job_id":null,"html_url":"https://github.com/codemation/easycharts","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemation%2Feasycharts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemation%2Feasycharts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemation%2Feasycharts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codemation%2Feasycharts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codemation","download_url":"https://codeload.github.com/codemation/easycharts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244777868,"owners_count":20508802,"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":["data-visualization","easy","fastapi","graphs","monitoring"],"created_at":"2024-10-11T18:59:44.592Z","updated_at":"2025-03-21T10:31:28.680Z","avatar_url":"https://github.com/codemation.png","language":"Python","readme":"![](images/logo.png)\n\n##\n\nEasily create data visualization of static or streaming data\n\n\n## Get Started\n\n```python\npip install easycharts\n```\n\n## Create EasyCharts Server\n\n```python\n# charts.py\nfrom fastapi import FastAPI\nfrom easycharts import ChartServer\n\nserver = FastAPI()\n\n@server.on_event('startup')\nasync def setup():\n    server.charts = await ChartServer.create(\n        server,\n        charts_db=\"test\"\n    )\n\n    await server.charts.create_dataset(\n        \"test\",\n        labels=['a', 'b', 'c', 'd'],\n        dataset=[1,2,3,4]\n    )\n```\n## Start Server\n\n```bash\nuvicorn --host 0.0.0.0 --port 0.0.0.0 charts:server\n\n```\n\n![](images/get-started-test.png)\n\n## Update Data via API\n\nIn a separate window, access the OpenAPI docs to demonstrate dynanimc updates to the graph\n\n```\nhttp://0.0.0.0:8220/docs\n```\n\n![](images/get-started-update.png) \n\n## Line\n![](images/get-started-test-1.png)\n\n\n## Bar\n![](images/get-started-test-1-bar.png)\n\n## APIS\n\n![](images/get-started-apis.png)\n\n## Real World Usage - Resource Monitoring\n\n\n```python\nimport datetime, psutil\nimport asyncio\nfrom fastapi import FastAPI\nfrom easycharts import ChartServer\nfrom easyschedule import EasyScheduler\n\nscheduler = EasyScheduler()\nserver = FastAPI()\n\nevery_minute = '* * * * *'\n\n@server.on_event('startup')\nasync def setup():\n    asyncio.create_task(scheduler.start())\n    server.charts = await ChartServer.create(\n        server,\n        charts_db=\"charts_database\",\n        chart_prefix = '/mycharts'\n    )\n\n    await server.charts.create_dataset(\n        \"test\",\n        labels=['a', 'b', 'c', 'd'],\n        dataset=[1,2,3,4]\n    )\n\n    # set initial sync time\n    label=datetime.datetime.now().isoformat()[11:19]\n    await server.charts.create_dataset(\n        'cpu',\n        labels=[label],\n        dataset=[psutil.cpu_percent()]\n    )\n    await server.charts.create_dataset(\n        'mem',\n        labels=[label],\n        dataset=[psutil.virtual_memory().percent]\n    )\n\n    @scheduler(schedule=every_minute)\n    async def resource_monitor():\n        time_now=datetime.datetime.now().isoformat()[11:19]\n\n        # updates CPU \u0026 MEM datasets with current time\n        await server.charts.update_dataset(\n            'cpu',\n            label=time_now,\n            data=psutil.cpu_percent()\n        )\n        await server.charts.update_dataset(\n            'mem',\n            label=time_now,\n            data=psutil.virtual_memory().percent\n        )\n```\n\n![](images/resource-mon.png)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodemation%2Feasycharts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodemation%2Feasycharts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodemation%2Feasycharts/lists"}