Compare commits
42 Commits
improvemen
...
developmen
Author | SHA1 | Date |
---|---|---|
Vitaliy Filippov | 32b843aaf3 | |
William | 66e97ab935 | |
williamlardier | 8425d23e04 | |
williamlardier | 2e3d13c5b9 | |
William | ec4e28f050 | |
williamlardier | 435c7436d0 | |
williamlardier | aae50a9096 | |
williamlardier | 1881146b28 | |
williamlardier | 6c600cd02f | |
williamlardier | 72108aed4f | |
William | e14a16f988 | |
williamlardier | bc5fc17097 | |
williamlardier | 0a56b2a48c | |
William | 0330b36bb3 | |
williamlardier | 179d43d73a | |
williamlardier | 9304a78cc4 | |
williamlardier | eb40166fd8 | |
williamlardier | 71e1a487a5 | |
williamlardier | 7c6c9127cb | |
williamlardier | 93938413e9 | |
williamlardier | a3af7cdd1e | |
williamlardier | fed919ae16 | |
William | 676a70e102 | |
williamlardier | 481e44308b | |
williamlardier | 4235b98de8 | |
williamlardier | d0b147fe85 | |
williamlardier | a4f419ebfa | |
William | fed06b3abf | |
williamlardier | 264d776838 | |
williamlardier | 1ef5ac9705 | |
William | 34e20e72c8 | |
williamlardier | 38607a83b3 | |
williamlardier | 5f688379e7 | |
williamlardier | ad70fdf5b0 | |
williamlardier | 8ea438271b | |
williamlardier | d1da0f6575 | |
William | 5a3d96b49c | |
williamlardier | c09ac9f116 | |
williamlardier | 51fcaab601 | |
williamlardier | a21e1b7b42 | |
williamlardier | 1f939d7d96 | |
williamlardier | 76dc08740d |
|
@ -0,0 +1 @@
|
||||||
|
index.d.ts
|
|
@ -0,0 +1,15 @@
|
||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
commonjs: true,
|
||||||
|
es2021: true,
|
||||||
|
},
|
||||||
|
extends: 'airbnb-base',
|
||||||
|
overrides: [
|
||||||
|
],
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
},
|
||||||
|
};
|
|
@ -0,0 +1,43 @@
|
||||||
|
name: release
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
tag:
|
||||||
|
description: 'Tag to be released'
|
||||||
|
required: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
verify-release:
|
||||||
|
name: Verify if tag is valid
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout httpagent repository
|
||||||
|
uses: 'actions/checkout@v3'
|
||||||
|
with:
|
||||||
|
ref: ${{ github.ref }}
|
||||||
|
|
||||||
|
- name: Fetch tags
|
||||||
|
run: git fetch --tags
|
||||||
|
|
||||||
|
- name: 'Check if tag was already created'
|
||||||
|
shell: bash
|
||||||
|
run: >
|
||||||
|
git show-ref --tags ${{ github.event.inputs.tag }} --quiet \
|
||||||
|
&& exit 1 || exit 0
|
||||||
|
|
||||||
|
release:
|
||||||
|
name: Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- verify-release
|
||||||
|
steps:
|
||||||
|
- name: Create Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
name: Release ${{ github.event.inputs.tag }}
|
||||||
|
tag_name: ${{ github.event.inputs.tag }}
|
||||||
|
generate_release_notes: true
|
||||||
|
target_commitish: ${{ github.sha }}
|
|
@ -0,0 +1,35 @@
|
||||||
|
name: Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- 'master/**'
|
||||||
|
- 'feature/**'
|
||||||
|
- 'documentation/**'
|
||||||
|
- 'improvement/**'
|
||||||
|
- 'bugfix/**'
|
||||||
|
- 'w/**'
|
||||||
|
- 'q/**'
|
||||||
|
- 'hotfix/**'
|
||||||
|
- 'task/**'
|
||||||
|
- 'release/**'
|
||||||
|
- 'main'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Install deps
|
||||||
|
run: sudo apt-get update -q
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- name: Install Yarn
|
||||||
|
run: npm install -g yarn
|
||||||
|
- name: install dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: run lint
|
||||||
|
run: yarn run eslint
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Typescript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
|
||||||
|
#reports
|
||||||
|
reports/*.html
|
||||||
|
reports/*.json
|
||||||
|
|
||||||
|
#build
|
||||||
|
build
|
||||||
|
|
||||||
|
#local files
|
||||||
|
*.loc
|
|
@ -0,0 +1,2 @@
|
||||||
|
# Ignore artifacts:
|
||||||
|
build
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"arrowParens": "avoid",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"endOfLine": "auto",
|
||||||
|
"printWidth": 120,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"trailingComma": "all",
|
||||||
|
"useTabs": false
|
||||||
|
}
|
17
README.md
17
README.md
|
@ -1,3 +1,16 @@
|
||||||
# Arsenal-Networking
|
# HttpAgent
|
||||||
|
|
||||||
Common utilities for Scality S3 project components networking.
|
HttpAgent is a library on top of the native `http` and `https` NodeJS Agents
|
||||||
|
to enforce consistent, still configurable networking configuration for Scality
|
||||||
|
micro services.
|
||||||
|
|
||||||
|
What HttpAgent is:
|
||||||
|
|
||||||
|
- A wrapper enforcing, by default, both `keepAlive` and `maxSockets` options.
|
||||||
|
- A centralized way of handling Http(s) Agents, while supporting consistent
|
||||||
|
environment variables across components.
|
||||||
|
- A library that can be extended with more standard configurations.
|
||||||
|
|
||||||
|
What HttpAgent is not:
|
||||||
|
|
||||||
|
- An all-in-one library for networking-related code.
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# HttpAgent
|
||||||
|
|
||||||
|
## How to release ARSNN
|
||||||
|
|
||||||
|
To release a ARSNN version:
|
||||||
|
|
||||||
|
- Bump the project version in `package.json` in a PR and merge it.
|
||||||
|
|
||||||
|
- When the PR is merged, trigger the
|
||||||
|
[Release Workflow](https://github.com/scality/httpagent/actions/workflows/release.yaml)
|
||||||
|
via the workflow dispatch function. Use the `development/*` branch.
|
||||||
|
|
||||||
|
- You MUST fill the form with a tag. The new version you enter MUST be a valid
|
||||||
|
[SemVer](https://semver.org) version, matching with your `package.json`
|
||||||
|
version.
|
||||||
|
|
||||||
|
- The workflow will dynamically tag the project and generate a release
|
||||||
|
changelog.
|
|
@ -0,0 +1,29 @@
|
||||||
|
import HttpAgent, { HttpsAgent } from 'agentkeepalive';
|
||||||
|
|
||||||
|
import { HttpsOptions, HttpOptions } from 'agentkeepalive';
|
||||||
|
|
||||||
|
declare namespace http {
|
||||||
|
export interface clientConfigurationDefault {
|
||||||
|
/**
|
||||||
|
* Maximum Socket Number: true if TCP session reuse must be enabled
|
||||||
|
*/
|
||||||
|
maxSockets?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Agent extends HttpAgent {
|
||||||
|
constructor(opts?: HttpOptions, config?: clientConfigurationDefault);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare namespace https {
|
||||||
|
export interface clientConfigurationDefault {
|
||||||
|
/**
|
||||||
|
* Maximum Socket Number: true if TCP session reuse must be enabled
|
||||||
|
*/
|
||||||
|
maxSockets?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Agent extends HttpsAgent {
|
||||||
|
constructor(opts?: HttpsOptions, config?: clientConfigurationDefault);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
/* eslint-disable global-require */
|
||||||
|
|
||||||
|
exports.http = {
|
||||||
|
Agent: require('./lib/http-agent').default,
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.https = {
|
||||||
|
Agent: require('./lib/https-agent').default,
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.AgentConfiguration = require('./lib/config/agentConfiguration').default;
|
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* The maximum socket configuration defaults to 50.
|
||||||
|
*/
|
||||||
|
const maxSocketsNumber = Number(process.env.MAX_SOCKETS) || 50;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default configuration for the maxSocket profile.
|
||||||
|
* The goal is to enforce a `maxSockets` property to properly
|
||||||
|
* handle load.
|
||||||
|
*/
|
||||||
|
const agentConfiguration = {
|
||||||
|
keepAlive: true,
|
||||||
|
maxSockets: maxSocketsNumber,
|
||||||
|
maxFreeSockets: maxSocketsNumber,
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.default = agentConfiguration;
|
|
@ -0,0 +1,28 @@
|
||||||
|
const HttpAgent = require('agentkeepalive');
|
||||||
|
const agentConfiguration = require('./config/agentConfiguration');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class AgentHttp
|
||||||
|
* Abstracts the native HttpAgent class from agentkeepalive to enforce common
|
||||||
|
* networking configuration across components.
|
||||||
|
*/
|
||||||
|
class AgentHttp extends HttpAgent {
|
||||||
|
/**
|
||||||
|
* Constructor for the AgentHttp class
|
||||||
|
*
|
||||||
|
* @param opts - Custom HTTP Agent options
|
||||||
|
* @param config - user-defined default configuration to apply
|
||||||
|
*/
|
||||||
|
constructor(opts, config = {
|
||||||
|
maxSockets: true,
|
||||||
|
}) {
|
||||||
|
// Enforce TCP session reuse configuration, unless explicitely specified.
|
||||||
|
let defaultConfigurations = {};
|
||||||
|
if (config.maxSockets) {
|
||||||
|
defaultConfigurations = agentConfiguration;
|
||||||
|
}
|
||||||
|
super({ ...opts, ...defaultConfigurations });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.default = AgentHttp;
|
|
@ -0,0 +1,28 @@
|
||||||
|
const { HttpsAgent } = require('agentkeepalive');
|
||||||
|
const agentConfiguration = require('./config/agentConfiguration');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class AgentHttps
|
||||||
|
* Abstracts the native HttpsAgent class from agentkeepalive to enforce common
|
||||||
|
* networking configuration across components.
|
||||||
|
*/
|
||||||
|
class AgentHttps extends HttpsAgent {
|
||||||
|
/**
|
||||||
|
* Constructor for the AgentHttps class
|
||||||
|
*
|
||||||
|
* @param opts - Custom HTTPs Agent options
|
||||||
|
* @param config - user-defined default configuration to apply
|
||||||
|
*/
|
||||||
|
constructor(opts, config = {
|
||||||
|
maxSockets: true,
|
||||||
|
}) {
|
||||||
|
// Enforce TCP session reuse configuration, unless explicitely specified.
|
||||||
|
let defaultConfigurations = {};
|
||||||
|
if (config.maxSockets) {
|
||||||
|
defaultConfigurations = agentConfiguration;
|
||||||
|
}
|
||||||
|
super({ ...opts, ...defaultConfigurations });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.default = AgentHttps;
|
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"name": "httpagent",
|
||||||
|
"version": "1.0.6",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
},
|
||||||
|
"description": "A utility library for networking",
|
||||||
|
"main": "index.js",
|
||||||
|
"repository": "git@github.com:scality/httpagent.git",
|
||||||
|
"author": "Scality Inc.",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"scripts": {
|
||||||
|
"format": "prettier --write \"**/*.{ts,tsx,css,html}\" ",
|
||||||
|
"eslint": "eslint ./ --ext .js,.ts,.tsx",
|
||||||
|
"eslint-fix": "eslint ./ --ext .js,.ts,.tsx --fix",
|
||||||
|
"eslint-init": "eslint --init"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"agentkeepalive": "^4.2.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint": "^7.32.0 || ^8.2.0",
|
||||||
|
"eslint-config-airbnb-base": "^15.0.0",
|
||||||
|
"eslint-config-prettier": "^8.5.0",
|
||||||
|
"eslint-config-scality": "git+https://git.yourcmc.ru/vitalif/zenko-eslint-config-scality.git",
|
||||||
|
"eslint-plugin-import": "^2.25.2",
|
||||||
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
|
"prettier": "^2.8.0"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue