Skip to content

Commit

Permalink
use async tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
mithereal committed Dec 7, 2023
1 parent 0a3c07c commit e6cff09
Show file tree
Hide file tree
Showing 10 changed files with 298 additions and 92 deletions.
63 changes: 63 additions & 0 deletions .github/workflows/coveralls.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Created with GitHubActions version 0.2.16
name: Coveralls Report
env:
GITHUB_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
on:
- pull_request
- push
jobs:
linux:
name: Test on Ubuntu (Elixir ${{ matrix.elixir }}, OTP ${{ matrix.otp }})
runs-on: ubuntu-20.04
services:
# Label used to access the service container
strategy:
matrix:
elixir:
- '1.15.6'
otp:
- '26.1'
exclude:
- elixir: '1.13.4'
otp: '26.1'
- elixir: '1.14.5'
otp: '22.3'
- elixir: '1.14.5'
otp: '26.1'
- elixir: '1.15.6'
otp: '22.3'
- elixir: '1.15.6'
otp: '23.3'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Elixir
uses: erlef/setup-beam@v1
with:
elixir-version: ${{ matrix.elixir }}
otp-version: ${{ matrix.otp }}
- name: Restore deps
uses: actions/cache@v3
with:
path: deps
key: deps-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
- name: Restore _build
uses: actions/cache@v3
with:
path: _build
key: _build-${{ runner.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
- name: Get dependencies
run: mix deps.get
- name: Compile dependencies
run: MIX_ENV=test mix deps.compile
- name: Compile project
run: MIX_ENV=test mix compile
- name: Check code format
if: ${{ contains(matrix.elixir, '1.15.6') && contains(matrix.otp, '26.1') }}
run: mix format --check-formatted
- name: Run tests
run: MIX_ENV=test mix test
if: ${{ !(contains(matrix.elixir, '1.15.6') && contains(matrix.otp, '26.1')) }}
- name: Run tests with coverage
run: MIX_ENV=test mix coveralls.github
if: ${{ contains(matrix.elixir, '1.15.6') && contains(matrix.otp, '26.1') }}
21 changes: 21 additions & 0 deletions .github/workflows/increment_version.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: "Increment Product Version"
on:
workflow_dispatch:

push:
branches:
- master
jobs:
Increment-Version:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Bump version and push tag
uses: anothrNick/[email protected]
env:
GITHUB_TOKEN: ${{ github.token }}
WITH_V: true
71 changes: 71 additions & 0 deletions .github/workflows/vulnerability_scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Execute Vulnerability Scan
on:
workflow_dispatch:
schedule:
- cron: "0 12 * * 5"

env:
ELIXIR_VERSION: "1.15"
OTP_VERSION: "24.2.1"
APPLICATION_WORKING_DIR: ./

jobs:
execute_scan:
name: Execute Vulnerability Scan
runs-on: ubuntu-latest
steps:
- name: Checkout Github Repo
uses: actions/checkout@v3

- name: Setup Elixir
uses: erlef/setup-beam@v1
with:
otp-version: ${{ env.OTP_VERSION }}
elixir-version: ${{ env.ELIXIR_VERSION }}

- name: Setup Dependencies Cache
id: deps-cache
run: |
echo "key=${{ runner.os }}-Elixir(${{ env.OTP_VERSION }})-OTP(${{ env.ELIXIR_VERSION }})-Mix.LockHash(${{ hashFiles('**/mix.lock') }})" >> $GITHUB_OUTPUT
- name: Retrieve Cached Dependencies
uses: actions/cache@v3
id: mix-cache
with:
path: |
${{env.APPLICATION_WORKING_DIR}}/deps
${{env.APPLICATION_WORKING_DIR}}/_build
key: ${{ steps.deps-cache.outputs.key }}

- name: Install Dependencies
if: steps.mix-cache.outputs.cache-hit != 'true'
working-directory: ${{env.APPLICATION_WORKING_DIR}}
run: |
mix local.rebar --force
mix local.hex --force
mix deps.get
mix deps.compile
- name: Execute Report
id: report_status
working-directory: ${{env.APPLICATION_WORKING_DIR}}
run: |
mix deps.audit
- name: Echo Scan Exit Code
if: always()
run: echo "${{steps.report_status.outcome}}"

- name: Vulnerabilities Found - Discord notification
if: always() && steps.report_status.outcome == 'failure'
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: 'failure'
username: GitHub Actions
avatar_url: ${{ secrets.DISCORD_AVATAR_URL }}
title: " Vulnerability Audit"
description: "View Scan Results: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
image: ${{ secrets.DISCORD_EMBED_IMAGE }}
color: 0x0000ff
url: ${{ github.server_url }}/${{ github.repository }}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ by adding `speedtest` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:speedtest, "~> 1.1.0"}
{:speedtest, "~> 1.1.1"}
]
end
```
Expand Down
6 changes: 6 additions & 0 deletions coveralls.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"skip_files": [
"deps",
"config"
]
}
28 changes: 18 additions & 10 deletions lib/result.ex
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,16 @@ defmodule Speedtest.Result do
upload_total_time_in_sec = Enum.sum(upload_times)

upload_size_total_bytes = Enum.sum(upload_sizes)
upload_size_total_mb = upload_size_total_bytes / 125_000

upload = upload_size_total_mb / upload_total_time_in_sec
upload_size_total_mb = upload_size_total_bytes / 1_000_000

upload_size_total_mbit = upload_size_total_mb * 8

upload = upload_size_total_mbit / upload_total_time_in_sec

upload_avg_sec = upload_total_time_in_sec / Enum.count(upload_reply)
upload_avg_sec = upload_size_total_bytes / upload_avg_sec

upload_bps = upload_size_total_bytes / upload_avg_sec

download_times =
Enum.map(download_reply, fn x ->
Expand All @@ -56,15 +60,19 @@ defmodule Speedtest.Result do
download_time_in_sec = Enum.sum(download_times)

download_size_total_bytes = Enum.sum(download_sizes)
download_size_total_mb = download_size_total_bytes / 125_000

download = download_size_total_mb / download_time_in_sec
download_size_total_mb = download_size_total_bytes / 1_000_000

download_size_total_mbit = download_size_total_mb * 8

download = download_size_total_mbit / download_time_in_sec

download_avg_sec = download_time_in_sec / Enum.count(download_reply)
download_avg_sec = download_size_total_bytes / download_avg_sec

client = %{speedtest.config.client | ispdlavg: trunc(Float.round(download_avg_sec))}
client = %{client | ispulavg: trunc(Float.round(upload_avg_sec))}
download_bps = download_size_total_bytes / download_avg_sec

client = %{speedtest.config.client | ispdlavg: trunc(Float.round(download_bps))}
client = %{client | ispulavg: trunc(Float.round(upload_bps))}

result = %Result{
download: Float.round(download, 2),
Expand Down Expand Up @@ -108,9 +116,9 @@ defmodule Speedtest.Result do
)
|> Base.encode16()

download = round(result.download / 1000.0)
download = round(result.download)
ping = round(ping)
upload = round(result.upload / 1000.0)
upload = round(result.upload)

api_data = [
"recommendedserverid=" <> to_string(result.server.id),
Expand Down
Loading

0 comments on commit e6cff09

Please sign in to comment.