233 lines
12 KiB
JavaScript
233 lines
12 KiB
JavaScript
import knex from 'knex';
|
||
import { fileURLToPath } from 'url';
|
||
import { dirname } from 'path';
|
||
import config from '../knexfile.js';
|
||
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = dirname(__filename);
|
||
|
||
let db = null;
|
||
|
||
export async function getDB() {
|
||
if (!db) {
|
||
db = knex(config);
|
||
await db.migrate.latest();
|
||
}
|
||
return db;
|
||
}
|
||
|
||
export async function initDB() {
|
||
const db = await getDB();
|
||
|
||
const existing = await db('cv_data').where({ id: 1 }).first();
|
||
if (!existing) {
|
||
await db('cv_data').insert({
|
||
id: 1,
|
||
data: JSON.stringify({
|
||
"personal": {
|
||
"name": "Tuan-Dat Tran",
|
||
"title": "Junior DevOps Engineer",
|
||
"intro": "DevOps Engineer and Homelab Enthusiast based in Essen, Germany. Primary owner of a production aviation SaaS platform on Azure AKS, with a research background in P4 programmable networks and a co-authored IEEE publication.",
|
||
"email": "tuan-dat.tran@dextradata.com",
|
||
"github": "https://github.com/TuDatTr",
|
||
"linkedin": "https://www.linkedin.com/in/tudattr/",
|
||
"location": "Essen, Germany"
|
||
},
|
||
"experience": [
|
||
{
|
||
"id": 1,
|
||
"role": "Junior DevOps Engineer",
|
||
"company": "DextraData GRC Technologies GmbH",
|
||
"period": "2025 – present",
|
||
"type": "Full-time",
|
||
"description": "Primary owner of the GRASP GRC platform and Logipad aviation SaaS platform, running on Azure AKS and Rancher-managed Kubernetes clusters.",
|
||
"highlights": [
|
||
"Drives GitOps adoption with ArgoCD across production Kubernetes clusters",
|
||
"Manages CI/CD pipelines with Bitbucket Pipelines",
|
||
"Leads incident response and on-call for production outages",
|
||
"Reduced GRASP frontend pipeline from 30 to 16 minutes",
|
||
"Eliminated ~$2k/month Azure logging costs via workspace restructuring",
|
||
"Built internal AI tooling with LiteLLM and Ollama",
|
||
"Implemented Azure Container Registry mirroring to resolve Docker Hub rate limits"
|
||
]
|
||
},
|
||
{
|
||
"id": 2,
|
||
"role": "Research Assistant",
|
||
"company": "NCS Group, Universität Duisburg-Essen",
|
||
"period": "2021 – 2024",
|
||
"type": "Part-time",
|
||
"description": "Hands-on P4 and programmable data plane research on Intel Tofino ASICs and BMv2, culminating in a co-authored publication at IEEE LCN 2023 (Reverse Path Congestion Marking).",
|
||
"highlights": [
|
||
"Co-authored RPM: Reverse Path Congestion Marking on P4 Programmable Switches — IEEE LCN 2023",
|
||
"Built a Dockerized federated LSTM system with custom client-selection strategies for 5G network research",
|
||
"Implemented low-latency DASH video streaming on Kubernetes and WebRTC SVC simulcast via Janus",
|
||
"Managed lab infrastructure: Ansible-automated servers, 100G NIC testbeds (Intel E810, Netronome), DPDK",
|
||
"Administered AWS accounts, PartDB inventory system, and the group website"
|
||
]
|
||
},
|
||
{
|
||
"id": 3,
|
||
"role": "Student Mentor",
|
||
"company": "Universität Duisburg-Essen",
|
||
"period": "2021 – 2022",
|
||
"type": "Volunteer",
|
||
"description": "Introduced groups of ~20 freshmen to their new academic environment each semester, providing organizational and technical guidance throughout their first year.",
|
||
"highlights": [
|
||
"Guided new students through academic orientation each semester",
|
||
"Provided technical and organizational support throughout the first year"
|
||
]
|
||
},
|
||
{
|
||
"id": 4,
|
||
"role": "Software Engineer",
|
||
"company": "gefeba Engineering GmbH",
|
||
"period": "2018 – 2020",
|
||
"type": "Part-time",
|
||
"description": "Worked on the company's main product — a frame-based data exchange system for monitoring industrial machinery — and developed a real-time log visualization application.",
|
||
"highlights": [
|
||
"Developed features for a frame-based industrial data exchange system",
|
||
"Built a real-time log visualization application for industrial machinery",
|
||
"Stack: C#, Angular, Bootstrap, Entity Framework"
|
||
]
|
||
},
|
||
{
|
||
"id": 5,
|
||
"role": "Student Council Member",
|
||
"company": "Universität Duisburg-Essen",
|
||
"period": "2016 – 2019",
|
||
"type": "Volunteer",
|
||
"description": "Participated in faculty committees and organized social events. Managed the faculty's IT infrastructure and provided support to fellow students.",
|
||
"highlights": [
|
||
"Managed faculty IT infrastructure (Linux, Networking, LaTeX)",
|
||
"Organized social events and participated in faculty committees",
|
||
"Provided subject-specific and organizational support to fellow students"
|
||
]
|
||
},
|
||
{
|
||
"id": 6,
|
||
"role": "Software Engineer",
|
||
"company": "gefeba Engineering GmbH",
|
||
"period": "2013 – 2015",
|
||
"type": "Part-time",
|
||
"description": "Joined after a school internship. Worked on internal ERP projects, designed a mail traffic management tool, and contributed to master data management tooling.",
|
||
"highlights": [
|
||
"Developed internal ERP project features",
|
||
"Designed a tool for managing project-related mail traffic",
|
||
"Contributed to internal master data management tooling",
|
||
"Stack: C#, HTML, CSS, JavaScript"
|
||
]
|
||
}
|
||
],
|
||
"skills": {
|
||
"Container & Orchestration": [
|
||
"Kubernetes",
|
||
"Docker",
|
||
"Helm",
|
||
"ArgoCD"
|
||
],
|
||
"CI/CD": [
|
||
"Bitbucket Pipelines",
|
||
"Git"
|
||
],
|
||
"Cloud": [
|
||
"Azure",
|
||
"Azure AKS",
|
||
"Azure App Gateway",
|
||
"Azure Entra ID"
|
||
],
|
||
"Infrastructure as Code": [
|
||
"Ansible"
|
||
],
|
||
"Observability": [
|
||
"ELK Stack",
|
||
"Checkmk",
|
||
"UptimeRobot"
|
||
],
|
||
"Databases": [
|
||
"PostgreSQL",
|
||
"MongoDB",
|
||
"CouchDB"
|
||
],
|
||
"Programming": [
|
||
"Rust",
|
||
"Python",
|
||
"Bash",
|
||
"P4"
|
||
],
|
||
"Research": [
|
||
"Intel Tofino",
|
||
"BMv2",
|
||
"DPDK"
|
||
]
|
||
},
|
||
"education": [
|
||
{
|
||
"id": 1,
|
||
"degree": "B.Sc. Systems Engineering",
|
||
"institution": "Universität Duisburg-Essen",
|
||
"period": "2015 – present",
|
||
"status": "Bachelor thesis ongoing"
|
||
}
|
||
],
|
||
"projects": [
|
||
{
|
||
"id": 1,
|
||
"name": "Ethereum Smart Contract Fuzzer",
|
||
"description": "A fuzzer for Ethereum smart contracts built as part of the bachelor thesis project.",
|
||
"url": "#",
|
||
"tech": [
|
||
"Rust"
|
||
]
|
||
},
|
||
{
|
||
"id": 2,
|
||
"name": "Homelab",
|
||
"description": "Ansible-managed homelab running on Debian Linux with Raspberry Pi, Mikrotik networking, Pihole, and self-hosted services.",
|
||
"url": "https://git.tudattr.dev/tudattr/ansible",
|
||
"tech": [
|
||
"Ansible",
|
||
"Kubernetes",
|
||
"Debian Linux"
|
||
]
|
||
},
|
||
{
|
||
"id": 3,
|
||
"name": ".dotfiles",
|
||
"description": "Configuration files for daily-use tools providing a reproducible baseline for any personal ArchLinux system, including NeoVim (LazyVim), Zellij, and k9s.",
|
||
"url": "https://github.com/TuDatTr/dotfiles",
|
||
"tech": [
|
||
"Zsh",
|
||
"NeoVim",
|
||
"Zellij",
|
||
"ArchLinux"
|
||
]
|
||
},
|
||
{
|
||
"id": 4,
|
||
"name": "tudattr.dev",
|
||
"description": "Full-stack WebAssembly personal website built with the Rust-based Dioxus framework and Tailwind CSS.",
|
||
"url": "https://www.tudattr.dev",
|
||
"tech": [
|
||
"Rust",
|
||
"Dioxus",
|
||
"Tailwind CSS",
|
||
"WebAssembly"
|
||
]
|
||
}
|
||
]
|
||
})
|
||
});
|
||
console.log('Initialized database with default CV data');
|
||
}
|
||
|
||
console.log('Database initialized');
|
||
}
|
||
|
||
export async function closeDB() {
|
||
if (db) {
|
||
await db.destroy();
|
||
db = null;
|
||
}
|
||
}
|