Skip to content

Commit

Permalink
Merge branch 'main' of github.com:fankaiLiu/website
Browse files Browse the repository at this point in the history
  • Loading branch information
fankaiLiu committed Jun 29, 2024
2 parents a568401 + fe97837 commit b01ab6f
Show file tree
Hide file tree
Showing 233 changed files with 783 additions and 688 deletions.
13 changes: 13 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
6 changes: 6 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
!.vuepress/
!.*.js
.cache/
.temp/
node_modules/
dist/
13 changes: 13 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module.exports = {
root: true,
extends: 'vuepress',
overrides: [
{
files: ['*.ts', '*.vue'],
extends: 'vuepress-typescript',
parserOptions: {
project: ['tsconfig.json'],
},
},
],
}
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
message="build: version %s"
12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ sea-orm-migration = "0.12"
eyre = "0.6"
tera = "1.3"
futures = "0.3"
opentelemetry = "0.22"
opentelemetry-http = "0.11"
opentelemetry-jaeger = "0.21.0"
opentelemetry-prometheus = "0.15"
opentelemetry_sdk = "0.22"
opentelemetry = "0.23"
opentelemetry-http = "0.12"
opentelemetry-jaeger = "0.22.0"
opentelemetry-prometheus = "0.16"
opentelemetry_sdk = "0.23"
utoipa = "4.1.0"
utoipa-swagger-ui = "*"
tokio-stream = "0.1.14"
Expand All @@ -38,7 +38,7 @@ futures-util = { version = "0.3", default-features = true }
jsonwebtoken = "9"
once_cell = "1"
parking_lot = "0.12"
salvo = { version = "0.67", default-features = true }
salvo = { version = "0.68", default-features = true }
serde = "1"
serde_json = "1"
thiserror = "1"
Expand Down
74 changes: 39 additions & 35 deletions codes/graceful-shutdown/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,44 +1,48 @@
use salvo::prelude::*;
use std::time::Duration;
use salvo::server::ServerHandle;
use tokio::signal;

#[handler]
async fn hello() -> &'static str {
"Hello World"
}
#[tokio::main]
async fn main() {
let acceptor = TcpListener::new("127.0.0.1:5800").bind().await;
let server = Server::new(acceptor);
let handle = server.handle();

// Listen Shutdown Signal
tokio::spawn(listen_shutdown_signal(handle));

async fn before_shutdown(kind: &str) {
tracing::info!("Received {} signal", kind);
tracing::info!("Cleaning up...");
for i in (1..=3).rev() {
tracing::info!("Finishing in {}...", i);
tokio::time::sleep(Duration::from_secs(1)).await;
}
server.serve(Router::new()).await;
}

#[tokio::main]
async fn main() {
tracing_subscriber::fmt().init();
async fn listen_shutdown_signal(handle: ServerHandle) {
// Wait Shutdown Signal
let ctrl_c = async {
signal::ctrl_c()
.await
.expect("failed to install Ctrl+C handler");
};

let router = Router::new().get(hello);
let service = Service::new(router).hoop(Logger::new());
#[cfg(unix)]
let terminate = async {
signal::unix::signal(signal::unix::SignalKind::terminate())
.expect("failed to install signal handler")
.recv()
.await;
};

let acceptor = TcpListener::new("0.0.0.0:5800").bind().await;
let server = Server::new(acceptor);
let handle = server.handle();
#[cfg(windows)]
let terminate = async {
signal::windows::ctrl_c()
.expect("failed to install signal handler")
.recv()
.await;
};

tokio::select! {
_ = ctrl_c => println!("ctrl_c signal received"),
_ = terminate => println!("terminate signal received"),
};

// Graceful shutdown the server
tokio::spawn(async move {
use tokio::signal::ctrl_c;
use tokio::signal::unix::{signal, SignalKind};
let mut sigterm = signal(SignalKind::terminate()).unwrap();
let mut sigint = signal(SignalKind::interrupt()).unwrap();

tokio::select! {
_ = sigterm.recv() => before_shutdown("terminate").await,
_ = sigint.recv() => before_shutdown("interrupt").await,
_ = ctrl_c() => before_shutdown("ctrl-c").await
};
handle.stop_graceful(None);
});
server.serve(service).await;
// Graceful Shutdown Server
handle.stop_graceful(None);
}
File renamed without changes.
185 changes: 162 additions & 23 deletions src/.vuepress/config.ts → docs/.vuepress/config.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,29 @@
import { createRequire } from "node:module";
import process from 'node:process';
import { viteBundler } from '@vuepress/bundler-vite';
// import { docsearchPlugin } from '@vuepress/plugin-docsearch'
import { searchPlugin } from '@vuepress/plugin-search';
import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics';
import { getDirname, path } from '@vuepress/utils';
import { registerComponentsPlugin } from '@vuepress/plugin-register-components';
import { shikiPlugin } from '@vuepress/plugin-shiki';
import { defaultTheme } from "@vuepress/theme-default";
import { defineUserConfig } from "vuepress";
import theme from "./theme.js";
import { getDirname, path } from '@vuepress/utils';
import {
head
head,
navbarEn,
navbarEs,
navbarZhHans,
navbarZhHant,
sidebarEn,
sidebarEs,
sidebarZhHans,
sidebarZhHant,
} from './configs/index.js';

const __dirname = getDirname(import.meta.url);
const require = createRequire(import.meta.url);
const isProd = process.env.NODE_ENV === 'production';

export default defineUserConfig({
// set site base to default value
Expand Down Expand Up @@ -42,35 +56,153 @@ export default defineUserConfig({
},
},

// specify bundler via environment variable
bundler:
process.env.DOCS_BUNDLER === 'webpack' ? webpackBundler() : viteBundler(),

theme: defaultTheme({
logo: '/images/logo-text-h.svg',
repo: 'salvo-rs/salvo',
docsRepo: 'salvo-rs/website',
docsBranch: 'main',
docsDir: 'docs',

// theme-level locales config
locales: {
/**
* English locale config
*
* As the default locale of @vuepress/theme-default is English,
* we don't need to set all of the locale fields
*/
'/': {
// navbar
navbar: navbarEn,
// sidebar
sidebar: sidebarEn,
// page meta
editLinkText: 'Edit this page on GitHub',
},

/**
* Chinese locale config
*/
'/zh-hans/': {
// navbar
navbar: navbarZhHans,
selectLanguageName: '简体中文',
selectLanguageText: '选择语言',
selectLanguageAriaLabel: '选择语言',
// sidebar
sidebar: sidebarZhHans,
// page meta
editLinkText: '在 GitHub 上编辑此页',
lastUpdatedText: '上次更新',
contributorsText: '贡献者',
// custom containers
tip: '提示',
warning: '注意',
danger: '警告',
// 404 page
notFound: [
'这里什么都没有',
'我们怎么到这来了?',
'这是一个 404 页面',
'看起来我们进入了错误的链接',
],
backToHome: '返回首页',
// a11y
openInNewWindow: '在新窗口打开',
toggleColorMode: '切换颜色模式',
toggleSidebar: '切换侧边栏',
},
'/zh-hant/': {
// navbar
navbar: navbarZhHant,
selectLanguageName: '繁體中文',
selectLanguageText: '選擇語言',
selectLanguageAriaLabel: '選擇語言',
// sidebar
sidebar: sidebarZhHant,
// page meta
editLinkText: '在 GitHub 上編輯此頁',
lastUpdatedText: '上次更新',
contributorsText: '貢獻者',
// custom containers
tip: '提示',
warning: '註意',
danger: '警告',
// 404 page
notFound: [
'這裏什麼都冇有',
'我們怎麼到這來了?',
'這是一個 404 頁麵',
'看起來我們進入了錯誤的鏈接',
],
backToHome: '返回首頁',
// a11y
openInNewWindow: '在新窗口打開',
toggleColorMode: '切換顔色模式',
toggleSidebar: '切換側邊欄',
},
'/es/': {
// navbar
navbar: navbarEs,
selectLanguageName: 'Español',
selectLanguageText: 'Idioma',
selectLanguageAriaLabel: 'Idioma',
// sidebar
sidebar: sidebarEs,
// page meta
editLinkText: 'Editar ésta página en Github',
lastUpdatedText: 'Última Actualización',
contributorsText: 'Contribuidor',
// custom containers
tip: 'Nota',
warning: 'Aviso',
danger: 'Advertencia',
// 404 page
notFound: [
'No hay nada aquí',
'¿Cómo llegamos aquí?',
'Ésta es una página 404.',
'Parece que fuimos al enlace equivocado',
],
backToHome: 'Regresar a la página Principal',
// a11y
openInNewWindow: 'Abrir en una Nueva Ventana',
toggleColorMode: 'Cambiar Modo de Color',
toggleSidebar: 'Alternar Barra Lateral',
},
},

themePlugins: {
// only enable git plugin in production mode
git: isProd,
// use shiki plugin in production mode instead
prismjs: !isProd,
},
}),

// configure markdown
markdown: {
importCode: {
handleImportPath: (filePath) => {
if (filePath.endsWith("hotKey.ts"))
return path.resolve(__dirname, "./assets/hotKey.ts");

if (filePath.startsWith("@vuepress")) {
const pkgName = /(^@vuepress\/[^/]+)/.exec(filePath)![1]!;

return filePath
handleImportPath: (importPath) => {
// handle @vuepress packages import path
if (importPath.startsWith('@vuepress/')) {
const packageName = importPath.match(/^(@vuepress\/[^/]*)/)![1];
return importPath
.replace(
pkgName,
path.dirname(
createRequire(import.meta.url).resolve(
`${pkgName}/package.json`
)
)
packageName,
path.dirname(require.resolve(`${packageName}/package.json`)),
)
.replace("/src/", "/lib/");
.replace('/src/', '/lib/')
.replace(/hotKey\.ts$/, 'hotKey.d.ts');
}

return filePath;
return importPath;
},
},
},

theme,

// use plugins
plugins: [
searchPlugin({
Expand Down Expand Up @@ -185,5 +317,12 @@ export default defineUserConfig({
// we have multiple deployments, which would use different id
id: process.env.DOCS_GA_ID ?? 'G-X828N63WC8',
}),
registerComponentsPlugin({
componentsDir: path.resolve(__dirname, './components'),
}),
shikiPlugin({
langs: ['bash', 'rs', 'diff', 'json', 'md', 'ts', 'vue'],
theme: 'dark-plus',
})
],
});
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit b01ab6f

Please sign in to comment.