{ "info": { "author": "JP Sullivan (j3p0uk)", "author_email": "jonpsull@cisco.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Testing" ], "description": "ES-Logger\n=========\n\n[![Build Status](https://travis-ci.org/CiscoDevNet/es-logger.svg?branch=master)](https://travis-ci.org/CiscoDevNet/es-logger) [![PyPi](https://img.shields.io/pypi/v/es-logger.svg)](https://pypi.org/project/es-logger/) [![Gitter chat](https://badges.gitter.im/es-logger.png)](https://gitter.im/es-logger)\n\nThe es-logger project intends to build a pluggable data processor that will take data from\nJenkins builds and push that data into Elasticsearch via Logstash. Overview slides are available\non slideshare in [Pipeline Analytics](https://www.slideshare.net/JonPaulSullivan/pipeline-analytics)\n\n# Installation and Running\n\nInstall the framework using:\n\n python ./setup.py install\n\nInstall from source for developing using:\n\n python ./setup.py develop\n\nInstall from pypi repository with:\n\n pip install es-logger\n\nAfter that, set environment variables needed, and just execute es-logger!\n\n## Jenkins Connection\n* JENKINS_URL - Used to prefix the location to gather Jenkins data from using the\n[python-jenkins](https://python-jenkins.readthedocs.io/en/latest/) library\n* JENKINS_USER - Username to access Jenkins\n* JENKINS_PASSWORD - Password to access Jenkins. Can also be an API key\n\n## Job Information\n* ES_JOB_NAME - The full job name with all paths, added to the JENKINS_URL\n* ES_BUILD_NUMBER - The build number to collect data for\n\n## Plugins\n* PROCESS_CONSOLE_LOGS - Console log processor plugins to run, space separated list\n* GATHER_BUILD_DATA - Build data gatherer plugins to run, space separated list\n* GENERATE_EVENTS - Event generator plugins to run, space separated list\n\n# Plugins\n\nThe plugin infrastructure is provided by the\n[stevedore library](https://pypi.python.org/pypi/stevedore).\n\nThere are following types of plugin supported:\n\n## Console Log Processors\n\nThese plugins will have a *process* function called that is passed the full console log\nof the job. It can perform any actions desirable, and shall return data, which will be\nadded to the es_info['console_log_plugins'][**plugin_name**] structure that is pushed to\nlogstash. A list or a dict is preferred as a return type.\n\n## Build Data Gatherers\n\nThese plugins will have a *gather* function that is passed the EsCollector object. This\nshould provide any data needed for the plugin to gather any additional data that should\nbe added to the es_info. This could include test results from an external system not\navailable to Jenkins, parsed logs from an external piece of hardware, etc.\n\nThe return should be a dictionary, which will be added to the\nes_info['build_data'][**plugin_name**] structure that is pushed to logstash.\n\n## Event Targets\n\nOnce the data is collected by Es-Logger and constructed into a series of events,\nthese events need to be sent to a target. A target is any location that will accept\njson structured events.\n\n### Logstash Target\n\nThe logstash target\n\n* LOGSTASH_SERVER - HTTP server configured to receive json messages, as per the sample\nconfiguration\n* LS_USER - User to connect to Logstash with\n* LS_PASSWORD - Password to connect to Logstash with\n\n## Event Generators\n\nAn event generator is intended to process the Jenkins information and generate a number of\nevents based off that data. This allows for the creation of unique events per-host or\nper-test if the Jenkins job operates on multiple resources. The structures returned are\nexpected to be very small, so surfacing data points to form the basis of visualisations. A\nsmall number of default fields will be added by the main program to identify the origination\nof the data, and the event data will become contained in a top-level key named after the plugin.\n\nThe return from the generator should be a list of events that will be posted to logstash\n\n# Example Execution\n\nHere is a sample execution of es-logger against a public Jenkins repo.\n\nIt uses the public Jenkins that Netflix builds code upon at\n[netflixoss.ci.cloudbees.com](https://netflixoss.ci.cloudbees.com/job/Lipstick-pull-requests)\n\n```\nexport JENKINS_URL=https://netflixoss.ci.cloudbees.com/\nexport ES_JOB_NAME=Lipstick-pull-requests\nexport GENERATE_EVENTS=\"junit commit\"\nES_BUILD_NUMBER=117 es-logger --no-post -c 100\n```\n\nEach execution can get a single jobs data. To iterate over many, a simple bash loop can\nsuffice, or you can import es-logger into a python script and use it directly, similarly\nto how it is used in [es\\_logger/cli.py](es_logger/cli.py).\n\n```\nfor i in $(seq 110 116)\ndo\n ES_BUILD_NUMBER=${i} es-logger --no-post -c 100\ndone\n```\n\n```\nusage: es-logger [-h] [--no-dump | --no-post] [-c CONSOLE_LENGTH] [-e] [-p]\n [-t TARGET] [--debug]\n\nRead data from a completed Jenkins job and push it to a logstash instance.\n\nBehaviour is controlled through a number of environment variables as follows:\n\nWhat data to gather:\n PROCESS_CONSOLE_LOGS Which ConsoleLogProcessor plugins to use in processing\n GATHER_BUILD_DATA Which GatherBuildData plugins to use in processing\n GENERATE_EVENTS Which EventGenerator plugins to use in processing\n\nWhere to gather data from:\n JENKINS_URL The url to access Jenkins at\n JENKINS_USER The username for Jenkins access\n JENKINS_PASSWORD The password or API token for Jenkins access\n\nWhat to gather data from:\n ES_JOB_NAME The \"Full Project Name\" style job name for the job to process\n ES_BUILD_NUMBER The build number for the job to process\n\nTarget Variables:\n\nLogstash Target Environment Variables:\n LOGSTASH_SERVER The server to send events to\n LS_USER The user for logstash access\n LS_PASSWORD The password for logstash access\n\noptional arguments:\n -h, --help show this help message and exit\n --no-dump Do not dump events to the console\n --no-post Do not post events to any targets\n -c CONSOLE_LENGTH, --console-length CONSOLE_LENGTH\n Restrict the console length in the event to this\n number of characters\n -e, --events-only Do not dump or post the main job event, only events\n from EventGenerator plugins\n -p, --list-plugins List all plugins available\n -t TARGET, --target TARGET\n A target to send events to\n --debug Print debug logs to console during execution\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/CiscoDevNet/es-logger", "keywords": "jenkins development elasticsearch logstash build", "license": "", "maintainer": "", "maintainer_email": "", "name": "es-logger", "package_url": "https://pypi.org/project/es-logger/", "platform": "Any", "project_url": "https://pypi.org/project/es-logger/", "project_urls": { "Bug Reports": "https://github.com/CiscoDevNet/es-logger/issues", "Homepage": "https://github.com/CiscoDevNet/es-logger", "Source": "https://github.com/CiscoDevNet/es-logger/" }, "release_url": "https://pypi.org/project/es-logger/2.86/", "requires_dist": null, "requires_python": "", "summary": "Framework for Creating Logstash events from Jenkins Jobs", "version": "2.86" }, "last_serial": 5991049, "releases": { "2.0": [ { "comment_text": "", "digests": { "md5": "9f6815a1e19b982f22315a3d0225d91a", "sha256": "167908d0d59023c98be9c158dd8294c63fb924f71fd7b196366e13825d67cc48" }, "downloads": -1, "filename": "es_logger-2.0.tar.gz", "has_sig": false, "md5_digest": "9f6815a1e19b982f22315a3d0225d91a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10169, "upload_time": "2018-04-19T14:24:24", "url": "https://files.pythonhosted.org/packages/31/2f/5fc3fe181b2e11dc9af31df497b0da98e06429713f6edb8159de5eb46171/es_logger-2.0.tar.gz" } ], "2.10": [ { "comment_text": "", "digests": { "md5": "30b0393e010e4ecec94a273d97c06cca", "sha256": "cd23a0a9fbb0e46780469c471f783223bf9f06e1d438ed76d57ed22d57916460" }, "downloads": -1, "filename": "es_logger-2.10.tar.gz", "has_sig": false, "md5_digest": "30b0393e010e4ecec94a273d97c06cca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18178, "upload_time": "2018-04-20T18:35:52", "url": "https://files.pythonhosted.org/packages/c4/b1/a37f9dc1cd469bf4512ef438f6ab6583e9f1b3945344d9d41e14c7bc28c4/es_logger-2.10.tar.gz" } ], "2.11": [ { "comment_text": "", "digests": { "md5": "8f11ee15c0aa441f88702a455bb5a4ef", "sha256": "d3e76328aa7c5a8835cfb06a9b8860fabb643cd63b2b015393c12ad68c674405" }, "downloads": -1, "filename": "es_logger-2.11.tar.gz", "has_sig": false, "md5_digest": "8f11ee15c0aa441f88702a455bb5a4ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18466, "upload_time": "2018-04-24T17:26:36", "url": "https://files.pythonhosted.org/packages/96/52/fa5b34f3538427a45323b3fcb9f5de8a46a3c19731d9e0cc811ffe1dc220/es_logger-2.11.tar.gz" } ], "2.22": [ { "comment_text": "", "digests": { "md5": "98530bcab54d1dbd47f543fe3479e4c5", "sha256": "ab568f207d95abb934a1b65cc45b658e2cf3271e527e44bf43e2d36bcd9f9726" }, "downloads": -1, "filename": "es_logger-2.22.tar.gz", "has_sig": false, "md5_digest": "98530bcab54d1dbd47f543fe3479e4c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19555, "upload_time": "2018-09-13T09:36:37", "url": "https://files.pythonhosted.org/packages/db/4c/7ccd9e45939f06356c84c884d7b8195b78a18792aa6a4a7ed6435f781293/es_logger-2.22.tar.gz" } ], "2.33": [ { "comment_text": "", "digests": { "md5": "68fdc267cabfb0df871ebda73d3fad16", "sha256": "02ae5571eed1a9032129f1f329dc5fe4304da5dac94ddc867d4fe4c3266ae1b1" }, "downloads": -1, "filename": "es_logger-2.33.tar.gz", "has_sig": false, "md5_digest": "68fdc267cabfb0df871ebda73d3fad16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19559, "upload_time": "2018-09-14T11:03:00", "url": "https://files.pythonhosted.org/packages/d8/6a/f5a4083de7a9e0d0d7342621db077a3bc415292deddf8d405ab155b7ab7d/es_logger-2.33.tar.gz" } ], "2.4": [ { "comment_text": "", "digests": { "md5": "3c4ef382ba8f6b6f18a045badd77a189", "sha256": "7092de8cd461acbc1ab89ce12fced530dcd2482085c4d4fdaccc0d3394d024c0" }, "downloads": -1, "filename": "es_logger-2.4.tar.gz", "has_sig": false, "md5_digest": "3c4ef382ba8f6b6f18a045badd77a189", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14704, "upload_time": "2018-04-19T15:36:00", "url": "https://files.pythonhosted.org/packages/d2/d0/8e025e6bf4a036a8c4136487761bf3e0a4b468ed257d85ed3225d638d8d1/es_logger-2.4.tar.gz" } ], "2.40": [ { "comment_text": "", "digests": { "md5": "217ad26a41b30cd60bd05b291ea16aab", "sha256": "c40b1b6b04770669b4b49958654a505fe6f823ae4a1f3ad536c2e40fb9eddb75" }, "downloads": -1, "filename": "es_logger-2.40.tar.gz", "has_sig": false, "md5_digest": "217ad26a41b30cd60bd05b291ea16aab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19331, "upload_time": "2018-09-14T12:17:06", "url": "https://files.pythonhosted.org/packages/1e/ff/82155da1340c903c6d05be5c7ceca4692a0dc6434748c113b8970cf8268b/es_logger-2.40.tar.gz" } ], "2.41": [ { "comment_text": "", "digests": { "md5": "0a5d2e02ef6a365bafb5436eb9fef358", "sha256": "fbcf3fbda8d92359adaccb02fcb4031cd13290f411606762a2a0b73bf4a81c69" }, "downloads": -1, "filename": "es_logger-2.41.tar.gz", "has_sig": false, "md5_digest": "0a5d2e02ef6a365bafb5436eb9fef358", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19389, "upload_time": "2018-09-14T13:14:23", "url": "https://files.pythonhosted.org/packages/00/1c/52652b8459709f2234991a35f59d3c5d1e743ed20dc4c080d940090a4322/es_logger-2.41.tar.gz" } ], "2.45": [ { "comment_text": "", "digests": { "md5": "e46ca85b98c90745cb5732b672670331", "sha256": "d0a8233dc4cda48ba1c7145e7430d5b28788dda1a37007dc4a5e8e7f32db8a87" }, "downloads": -1, "filename": "es_logger-2.45.tar.gz", "has_sig": false, "md5_digest": "e46ca85b98c90745cb5732b672670331", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19509, "upload_time": "2018-09-18T16:00:04", "url": "https://files.pythonhosted.org/packages/2b/a5/a20aee7187c1e9cebe6bcbc9ad0b3bca804f17a561571bb8e870fe9aa5a1/es_logger-2.45.tar.gz" } ], "2.49": [ { "comment_text": "", "digests": { "md5": "5250b9b9626a80332bb727d7f5565113", "sha256": "bd252b9f48cafd5c34938134411ce1a0a1768ff9f06dbc58057bb4a5794c5cc0" }, "downloads": -1, "filename": "es_logger-2.49.tar.gz", "has_sig": false, "md5_digest": "5250b9b9626a80332bb727d7f5565113", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19612, "upload_time": "2018-10-30T16:55:08", "url": "https://files.pythonhosted.org/packages/4b/3f/1ec4ecab349fbb8c771ca3df1a80c740b8194464cf0f773801cee1ee720d/es_logger-2.49.tar.gz" } ], "2.5": [ { "comment_text": "", "digests": { "md5": "03466164d5c6f1d96ad7d5aa84653927", "sha256": "d46d25ca58c30518de46bd3fe2cb96fcb0611d570e1ccbdae89538773f3b184e" }, "downloads": -1, "filename": "es_logger-2.5.tar.gz", "has_sig": false, "md5_digest": "03466164d5c6f1d96ad7d5aa84653927", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14559, "upload_time": "2018-04-19T15:40:28", "url": "https://files.pythonhosted.org/packages/d7/04/16dde00b7f856df8f33dd472e80782d796e3a3aae4eb98ca362feec18b8b/es_logger-2.5.tar.gz" } ], "2.51": [ { "comment_text": "", "digests": { "md5": "58079800f7695e2bac567735eb3c1d2a", "sha256": "8ee33e06f6127b28f5774d80cd3c67dd7029eec9ca1999b641646c9cbec06c1a" }, "downloads": -1, "filename": "es_logger-2.51.tar.gz", "has_sig": false, "md5_digest": "58079800f7695e2bac567735eb3c1d2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21323, "upload_time": "2018-11-23T17:02:06", "url": "https://files.pythonhosted.org/packages/c5/59/b148c312605a86f4d3c33df587c6c9cf0392a7b07a690c101bf50a27dc1d/es_logger-2.51.tar.gz" } ], "2.52": [ { "comment_text": "", "digests": { "md5": "686cc88634fecf4d56754c29e7fecd19", "sha256": "506c41113fd24930469bfc9ee40bb20b9a588114f9c5db75a4b8ca0ee973f013" }, "downloads": -1, "filename": "es_logger-2.52.tar.gz", "has_sig": false, "md5_digest": "686cc88634fecf4d56754c29e7fecd19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21454, "upload_time": "2018-11-29T18:34:43", "url": "https://files.pythonhosted.org/packages/aa/c8/e4638d7f3532450159222cfff8ae5791d3699fa8956f9db0230fb8f48904/es_logger-2.52.tar.gz" } ], "2.56": [ { "comment_text": "", "digests": { "md5": "1bb8be0df06ed5948be8db4c5f0e4cee", "sha256": "f02fb1002a520e3e3cc86749f3aaec168df583df96c3975859ae1496c1a95895" }, "downloads": -1, "filename": "es_logger-2.56.tar.gz", "has_sig": false, "md5_digest": "1bb8be0df06ed5948be8db4c5f0e4cee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27820, "upload_time": "2018-12-17T16:21:34", "url": "https://files.pythonhosted.org/packages/f7/1a/cc64f7ca11c3cc938081697be0445a93e9f9b91015944e9c8311975da84e/es_logger-2.56.tar.gz" } ], "2.58": [ { "comment_text": "", "digests": { "md5": "db793e4760eb7e7eed1c9a1d17719169", "sha256": "63c5533c8dccb0f76e2cd131e46e118d2afc9026d5ff92c10530d904c30d0e2e" }, "downloads": -1, "filename": "es_logger-2.58.tar.gz", "has_sig": false, "md5_digest": "db793e4760eb7e7eed1c9a1d17719169", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28023, "upload_time": "2018-12-17T20:41:40", "url": "https://files.pythonhosted.org/packages/f3/dc/7cc78506bce810f46507cb6883075f0a01364406572f0932b85edca114a4/es_logger-2.58.tar.gz" } ], "2.6": [ { "comment_text": "", "digests": { "md5": "e89171ffdff4f1708c6617026f436c8e", "sha256": "ae7504a12d29a47e90c5f5b3a21bd106ca234444b90b99a515aa56f2d906c345" }, "downloads": -1, "filename": "es_logger-2.6.tar.gz", "has_sig": false, "md5_digest": "e89171ffdff4f1708c6617026f436c8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14650, "upload_time": "2018-04-19T15:54:36", "url": "https://files.pythonhosted.org/packages/58/b9/94df3f05a32cc54fd0d666c63626c871d60439e69d5142fa98b542f0d4ea/es_logger-2.6.tar.gz" } ], "2.61": [ { "comment_text": "", "digests": { "md5": "94508c00a6df78d65214e6728d93dd88", "sha256": "a81999d52789cd460c9bfb6ed662c708faef92c834e8a9d29bf112ed5a793ae9" }, "downloads": -1, "filename": "es_logger-2.61.tar.gz", "has_sig": false, "md5_digest": "94508c00a6df78d65214e6728d93dd88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28023, "upload_time": "2018-12-18T10:52:06", "url": "https://files.pythonhosted.org/packages/e0/e7/3cc79b5d3be31ff6784341c7550409fdfcce56b9fe338430623968b04637/es_logger-2.61.tar.gz" } ], "2.63": [ { "comment_text": "", "digests": { "md5": "aa1f8eb53ffc90059ceee298b27fbbea", "sha256": "5056e19e555476dbb4be449321685050f909dbbb06cd82ff871fbdd33b29d052" }, "downloads": -1, "filename": "es_logger-2.63.tar.gz", "has_sig": false, "md5_digest": "aa1f8eb53ffc90059ceee298b27fbbea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28020, "upload_time": "2018-12-18T11:30:42", "url": "https://files.pythonhosted.org/packages/2e/a7/5ff38db48361230ec10d3621a1fa1bf53e1d58b3b6a2beb89add7c23f37c/es_logger-2.63.tar.gz" } ], "2.66": [ { "comment_text": "", "digests": { "md5": "791c7ade1389a3438678c5df6aeb4604", "sha256": "696b16fde33142e0f64a462b281ed37cd2a904f05e8a2aba7de32f2aa8df51ec" }, "downloads": -1, "filename": "es_logger-2.66.tar.gz", "has_sig": false, "md5_digest": "791c7ade1389a3438678c5df6aeb4604", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28158, "upload_time": "2018-12-19T15:34:52", "url": "https://files.pythonhosted.org/packages/b9/c9/e035d7ad37093dd928dd016f7e98de1cd2433b6c679c667e1642e96263e5/es_logger-2.66.tar.gz" } ], "2.68": [ { "comment_text": "", "digests": { "md5": "94ffd9577f164a82a3f00abb2b683334", "sha256": "36be026b72a8bcb85a5d12ab30e8dd0d116d241905e7dd428a686e4e6fcd9eee" }, "downloads": -1, "filename": "es_logger-2.68.tar.gz", "has_sig": false, "md5_digest": "94ffd9577f164a82a3f00abb2b683334", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28215, "upload_time": "2019-02-13T17:23:01", "url": "https://files.pythonhosted.org/packages/02/05/20777598ade3e7a0d800d0b657c4a68356ed47dba59960389bd2cf405933/es_logger-2.68.tar.gz" } ], "2.7": [ { "comment_text": "", "digests": { "md5": "13424b0ac41a4f5811711a9a767b77df", "sha256": "81499ae69c812c0f155e61a2fb71bd96bebe6c5a6015445c3b3420aadff2688a" }, "downloads": -1, "filename": "es_logger-2.7.tar.gz", "has_sig": false, "md5_digest": "13424b0ac41a4f5811711a9a767b77df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16590, "upload_time": "2018-04-19T16:33:55", "url": "https://files.pythonhosted.org/packages/2a/bb/ca32245d5b95f4c6c6fe91fbf16d72e7d95073d877f616c6b5f00f941cf5/es_logger-2.7.tar.gz" } ], "2.70": [ { "comment_text": "", "digests": { "md5": "ac1d60ed609e9735d0756c53c45f8c8f", "sha256": "6c1c46026905992eb94f2d080147d303c0bb36acdcd630fd69b19717073a601b" }, "downloads": -1, "filename": "es_logger-2.70.tar.gz", "has_sig": false, "md5_digest": "ac1d60ed609e9735d0756c53c45f8c8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28414, "upload_time": "2019-03-08T20:06:24", "url": "https://files.pythonhosted.org/packages/aa/6e/03452bb2b08c97f3a67407fcd970d2ca6be39e9640bf887b0471ba2474b0/es_logger-2.70.tar.gz" } ], "2.73": [ { "comment_text": "", "digests": { "md5": "101fd892b47687ddad252aff70b16bef", "sha256": "b335fe289fd8d562d9a9a6ac92e5913b8f740275f80d0327bc73b96c23872f76" }, "downloads": -1, "filename": "es_logger-2.73.tar.gz", "has_sig": false, "md5_digest": "101fd892b47687ddad252aff70b16bef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28448, "upload_time": "2019-05-17T14:55:15", "url": "https://files.pythonhosted.org/packages/67/12/cd89ec55f53bbb1386faf1766e93c06bd3807b3a34920630187e5908b8c2/es_logger-2.73.tar.gz" } ], "2.75": [ { "comment_text": "", "digests": { "md5": "06647480543cecce38b8438a604bb5d9", "sha256": "5fb2846c846ea159f9e7cea47deebafeeef77524ea3a2a9aee2b2fb449dda428" }, "downloads": -1, "filename": "es_logger-2.75.tar.gz", "has_sig": false, "md5_digest": "06647480543cecce38b8438a604bb5d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30570, "upload_time": "2019-09-04T15:05:17", "url": "https://files.pythonhosted.org/packages/83/45/8cc5d1ad0b884999481cdc5894fe8e8b8a534b906a3bbb6f6a330cd361d8/es_logger-2.75.tar.gz" } ], "2.77": [ { "comment_text": "", "digests": { "md5": "0f6084c5bca1afefddc029fc27aa607b", "sha256": "3403b943697acb0f16d20ebe98b9fbe24c7bf8d7ce0c8a8f055a2b2a163fa2d2" }, "downloads": -1, "filename": "es_logger-2.77.tar.gz", "has_sig": false, "md5_digest": "0f6084c5bca1afefddc029fc27aa607b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30933, "upload_time": "2019-09-10T09:49:27", "url": "https://files.pythonhosted.org/packages/b4/0a/b1b1cd970e646c31b8dbf7fb0fcbb63fd1da5ea15e29328cede78d46cf27/es_logger-2.77.tar.gz" } ], "2.82": [ { "comment_text": "", "digests": { "md5": "b34dd0e5992a0e4b6f4170b49c11c795", "sha256": "36f99e713cd3e73fc0f2ef076c01dcd958f7eaa955dd19bfd13a47c93c8f9ef7" }, "downloads": -1, "filename": "es_logger-2.82.tar.gz", "has_sig": false, "md5_digest": "b34dd0e5992a0e4b6f4170b49c11c795", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31522, "upload_time": "2019-09-25T13:10:55", "url": "https://files.pythonhosted.org/packages/87/cc/6695513fc6a544b0aa567129043c2cbeca62aac5af6e0b62177e433183c8/es_logger-2.82.tar.gz" } ], "2.84": [ { "comment_text": "", "digests": { "md5": "ca0d1d7e5a7770ee2de9a2f24fb05e78", "sha256": "b65d59d5ac503a5a464b052002d1a62d25513056fe297282973c198c99d17db7" }, "downloads": -1, "filename": "es_logger-2.84.tar.gz", "has_sig": false, "md5_digest": "ca0d1d7e5a7770ee2de9a2f24fb05e78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31795, "upload_time": "2019-10-16T17:06:17", "url": "https://files.pythonhosted.org/packages/81/c3/12b1f400f8d61137dcd84b13b8ecc971154c89bdf7ca71c240ad09479858/es_logger-2.84.tar.gz" } ], "2.86": [ { "comment_text": "", "digests": { "md5": "ec2feccc1e27f578fe6f3e431d8424d2", "sha256": "c2e2074423a68f9ea498a3323a9980c343ab41d4b77ba310c131902edd09c947" }, "downloads": -1, "filename": "es_logger-2.86.tar.gz", "has_sig": false, "md5_digest": "ec2feccc1e27f578fe6f3e431d8424d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32819, "upload_time": "2019-10-17T16:04:54", "url": "https://files.pythonhosted.org/packages/37/19/69da9cfc7a0287f677946c04bed7a79fb66b12263ce4f4e3718d345dd874/es_logger-2.86.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ec2feccc1e27f578fe6f3e431d8424d2", "sha256": "c2e2074423a68f9ea498a3323a9980c343ab41d4b77ba310c131902edd09c947" }, "downloads": -1, "filename": "es_logger-2.86.tar.gz", "has_sig": false, "md5_digest": "ec2feccc1e27f578fe6f3e431d8424d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32819, "upload_time": "2019-10-17T16:04:54", "url": "https://files.pythonhosted.org/packages/37/19/69da9cfc7a0287f677946c04bed7a79fb66b12263ce4f4e3718d345dd874/es_logger-2.86.tar.gz" } ] }