Compare commits

..

17 commits

Author SHA1 Message Date
Tobias Schmidl
f9663a175a Update metadata 2021-04-28 08:26:42 +00:00
Tobias Schmidl
935d2e534d made the entries clickable 2021-04-27 15:08:22 +02:00
Tobias Schmidl
074cfbf846 updated scaffold 2021-03-01 10:26:01 +01:00
Tobias Schmidl
f67825e76c moved scaffolding files to .pscaffold 2021-02-12 07:25:47 +01:00
Tobias Schmidl
9bfa8f62fc Panel space is valuable! 2020-09-21 08:10:31 +02:00
Tobias Schmidl
a95fc1ace0 fixed a few pylint warnings 2020-09-21 08:10:28 +02:00
Tobias Schmidl
07fd54dfca added pylama.ini, extended style.yapf 2020-09-21 08:10:26 +02:00
Tobias Schmidl
26010092b9 Extended type annotations 2020-09-21 08:10:24 +02:00
Tobias Schmidl
fbcfafdac3 added first draft 2020-09-21 08:10:22 +02:00
Tobias Schmidl
bdb0fd33cc Used pylama.ini from other project 2020-09-21 08:10:19 +02:00
Tobias Schmidl
17ecea90fa incorporated some of the findings of pylint 2020-09-21 08:10:17 +02:00
Tobias Schmidl
cd2bd27711 Added yapf config, applied yapf 2020-09-21 08:10:15 +02:00
Tobias Schmidl
98fb0be057 Replace the if switch with a lambda and a for loop 2020-09-21 08:10:13 +02:00
Tobias Schmidl
d0cede7771 moved ping.1m+.py --> httping.py 2020-09-21 08:10:11 +02:00
Tobias Schmidl
5a91c8c941 Added requirements 2020-09-21 08:10:08 +02:00
Tobias Schmidl
34a9fd6d40 Added metadata for bitbar 2020-09-21 08:10:06 +02:00
Tobias Schmidl
3a8c260b8c Added ping.1m+.py 2020-09-21 08:10:03 +02:00
7 changed files with 46 additions and 167 deletions

106
.gitignore vendored
View file

@ -1,106 +0,0 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
/tags
/tags.*

1
.gitignore vendored Symbolic link
View file

@ -0,0 +1 @@
.pscaffold/.gitignore

22
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,22 @@
image: python
test:pylama:
stage: test
only:
- master
- develop
before_script:
- if test -r requirements.txt; then pip install -r requirements.txt; fi
script:
if test -x "$(which pylama)"; then pylama *.py; fi
test:pytest:
stage: test
only:
- master
- develop
before_script:
- if test -r requirements.txt; then pip install -r requirements.txt; fi
script:
if test -x "$(which pytest)"; then pytest .; fi

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule ".pscaffold"]
path = .pscaffold
url = ../pscaffold.git

1
.pscaffold Submodule

@ -0,0 +1 @@
Subproject commit bc09b49a828808ea9c0b42f80af0b06f90e207cc

View file

@ -1,33 +0,0 @@
[style]
# Insert a blank line before a module docstring.
blank_line_before_module_docstring=True
# The column limit.
column_limit=120
# Split before the '.' if we need to split a longer expression:
#
# foo = ('This is a really long string: {}, {}, {}, {}'.format(a, b, c, d))
#
# would reformat to something like:
#
# foo = ('This is a really long string: {}, {}, {}, {}'
# .format(a, b, c, d))
split_before_dot=True
# Set to True to split list comprehensions and generators that have
# non-trivial expressions and multiple clauses before each of these
# clauses. For example:
#
# result = [
# a_long_var + 100 for a_long_var in xrange(1000)
# if a_long_var % 10]
#
# would reformat to something like:
#
# result = [
# a_long_var + 100
# for a_long_var in xrange(1000)
# if a_long_var % 10]
split_complex_comprehension=True

1
.style.yapf Symbolic link
View file

@ -0,0 +1 @@
.pscaffold/.style.yapf

View file

@ -1,35 +1,35 @@
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
""" Simulates httping for `argos <https://github.com/p-e-w/argos>`"""
"""Simulates httping for `argos <https://github.com/p-e-w/argos>`."""
# <bitbar.title>httping</bitbar.title>
# <bitbar.version>v1.0</bitbar.version>
# <bitbar.author>Tobias Schmidl</bitbar.author>
# <bitbar.author.github>schtobia</bitbar.author.github>
# <bitbar.desc>Short description of what your plugin does.</bitbar.desc>
# <bitbar.desc>Simulates httping.</bitbar.desc>
# <bitbar.image></bitbar.image>
# <bitbar.dependencies>python,requests</bitbar.dependencies>
# <bitbar.abouturl>https://github.com/schtobia/argos-httping/blob/master/httping.py</bitbar.abouturl>
# <bitbar.abouturl>https://gitlab.com/schtobia/argos-httping/blob/master/httping.py</bitbar.abouturl>
from __future__ import annotations
import datetime # for the whole ms → s and vice versa stuff
import statistics # for median and stdev
import sys # for redirecting print to stderr
from typing import Generic, List, Sequence, TypeVar, Optional, Tuple, Dict, Union
from typing import Dict, List, Optional, Tuple
import requests # for the central HTTP HEAD request
__author__ = "Tobias Schmidl"
__copyright__ = "Copyright 2018, Tobias Schmidl"
__copyright__ = "Copyright 2021, Tobias Schmidl"
__license__ = "MIT"
__version__ = "0.0.1"
__version__ = "1.0"
__maintainer__ = "Tobias Schmidl"
MAX_PING: datetime.timedelta = datetime.timedelta(milliseconds=1000) # in seconds
TARGETS: List[str] = ["https://www.google.de", "https://www.bing.com", "https://www.wikipedia.org"]
T = TypeVar('T')
Bucket = Tuple[int, int]
BucketList = List[Bucket]
@ -37,17 +37,18 @@ MAX_PING_IN_MS: int = int(MAX_PING.total_seconds() * 1000)
def in_bucket(element: int, bucket: Bucket) -> bool:
""" Returns True if element is in bucket """
"""Return True if element is in bucket."""
return bucket[0] <= element <= bucket[1]
def generate_buckets(min_val: int, max_val: int, step_width: int = 2) -> BucketList:
""" Generates a list of partitioned lists between min_val and max_val."""
"""Generate a list of partitioned lists between min_val and max_val."""
return [(x, x + step_width - 1) for x in range(min_val, max_val, step_width)]
class Themes:
"""Maintains a list of themes and generates buckets between 0 and MAX_PING_IN_MS based on the selected theme."""
"""Maintain a list of themes and generates buckets between 0 and MAX_PING_IN_MS based on the selected theme."""
# Themes are from http://colorbrewer2.org/
purple_green: List[str] = ["#762a83", "#9970ab", "#c2a5cf", "#a6dba0", "#5aae61", "#1b7837"]
red_green: List[str] = ["#d73027", "#fc8d59", "#fee08b", "#d9ef8b", "#91cf60", "#1a9850"]
@ -56,6 +57,7 @@ class Themes:
buckets: BucketList = []
def __init__(self, selected_colors):
"""Initialize class with a selected theme."""
self.selected_colors = selected_colors
self.buckets = generate_buckets(0, int(MAX_PING_IN_MS), int(MAX_PING_IN_MS / (len(selected_colors) - 1)))
@ -92,14 +94,16 @@ def httping(targets: List[str]) -> Tuple[Dict[str, Optional[float]], Optional[fl
if __name__ == "__main__":
responses, median, stddev = httping(TARGETS)
if isinstance(median, float) and median != MAX_PING_IN_MS:
print("⦿ " + str(round(median, 2)) + "±" + str(round(stddev, 2)) + " | color=" +
CURRENT_THEME.colorize(median)) # type: ignore
print("⦿ | color=" + CURRENT_THEME.colorize(median)) # type: ignore
else:
print("☠ | color=" + CURRENT_THEME.selected_colors[0])
print("---")
for current_host, current_response in responses.items():
if isinstance(current_response, float):
print(current_host + ": " + str(round(current_response, 2)) + " | color=" +
CURRENT_THEME.colorize(current_response))
CURRENT_THEME.colorize(current_response) + " | bash=\"httping -K " + current_host + "\"")
else:
print(current_host + ": ☠ | color=" + CURRENT_THEME.selected_colors[0])
print("---")
print("Average: " + str(round(median, 2)) + "±" + str(round(stddev, 2)) + " | color=" +
CURRENT_THEME.colorize(median))

View file

@ -1,15 +0,0 @@
[pylama]
format = pylint
linters = mccabe,pep257,pydocstyle,pep8,pycodestyle,pyflakes,pylint,isort,mypy
ignore = D203
skip=.env/*
[pylama:pycodestyle]
max_line_length = 120
[pylama:pep8]
max_line_length = 120
[pylama:pylint]
max_line_length = 120

1
pylama.ini Symbolic link
View file

@ -0,0 +1 @@
.pscaffold/pylama.ini