mirror of
https://github.com/StarFleetCPTN/GoMFT.git
synced 2026-09-08 15:41:20 +02:00
docs: Update README with file metadata tracking details
- Add new section describing file metadata tracking features - Include screenshot for file metadata view - Expand feature list with comprehensive metadata management capabilities - Update user guide with instructions for managing file metadata - Remove Font Awesome icons from status badges in components - Improve layout and styling for mobile responsiveness
This commit is contained in:
@@ -19,6 +19,10 @@ GoMFT is a web-based managed file transfer application built with Go, leveraging
|
|||||||

|

|
||||||
*Scheduling transfers with flexible cron expressions*
|
*Scheduling transfers with flexible cron expressions*
|
||||||
|
|
||||||
|
### File Metadata
|
||||||
|

|
||||||
|
*Track and manage file metadata with detailed information about transferred files*
|
||||||
|
|
||||||
### User Management
|
### User Management
|
||||||

|

|
||||||
*Create user accounts and manage them*
|
*Create user accounts and manage them*
|
||||||
@@ -39,6 +43,16 @@ GoMFT is a web-based managed file transfer application built with Go, leveraging
|
|||||||
- And more via rclone
|
- And more via rclone
|
||||||
- **Scheduled Transfers**: Configure transfers using cron expressions with flexible scheduling options
|
- **Scheduled Transfers**: Configure transfers using cron expressions with flexible scheduling options
|
||||||
- **Transfer Monitoring**: Real-time status updates and detailed transfer logs with bytes and files transferred statistics
|
- **Transfer Monitoring**: Real-time status updates and detailed transfer logs with bytes and files transferred statistics
|
||||||
|
- **File Metadata Tracking**: Complete history and status of all transferred files with detailed information:
|
||||||
|
- Process status (processed, archived, deleted)
|
||||||
|
- File size and hash information
|
||||||
|
- Advanced search and filtering capabilities
|
||||||
|
- Metadata retention for compliance and auditing
|
||||||
|
- Detailed file view with processing timestamps and job association
|
||||||
|
- Powerful filtering by status, filename, job, and date ranges
|
||||||
|
- Advanced search interface with multiple criteria
|
||||||
|
- Bulk management and record deletion capabilities
|
||||||
|
- Responsive design with mobile-friendly interface
|
||||||
- **Web Interface**: User-friendly interface for managing transfers, built with Templ components
|
- **Web Interface**: User-friendly interface for managing transfers, built with Templ components
|
||||||
- **File Pattern Matching**: Support for file patterns to filter files during transfers
|
- **File Pattern Matching**: Support for file patterns to filter files during transfers
|
||||||
- **File Output Patterns**: Dynamic naming of destination files using patterns with date variables
|
- **File Output Patterns**: Dynamic naming of destination files using patterns with date variables
|
||||||
@@ -201,6 +215,14 @@ GoMFT uses a configuration file located at `./data/gomft/config.json`. On first
|
|||||||
- Check detailed transfer history with performance metrics
|
- Check detailed transfer history with performance metrics
|
||||||
- View job run details including any error messages
|
- View job run details including any error messages
|
||||||
|
|
||||||
|
7. Manage file metadata:
|
||||||
|
- Navigate to the "Files" section to view all processed files
|
||||||
|
- Use filters to quickly find files by status, job ID, or filename
|
||||||
|
- Click on any file to view detailed metadata including timestamps, size, and hash
|
||||||
|
- Use the advanced search page for complex queries with multiple criteria
|
||||||
|
- Delete file metadata records when no longer needed
|
||||||
|
- View files associated with specific jobs by navigating from the job details
|
||||||
|
|
||||||
### User Management
|
### User Management
|
||||||
|
|
||||||
GoMFT uses a role-based access control system:
|
GoMFT uses a role-based access control system:
|
||||||
|
|||||||
@@ -50,15 +50,15 @@ templ HistoryContent(ctx context.Context, data HistoryData) {
|
|||||||
<p class="text-sm font-medium text-primary-600 dark:text-primary-400 truncate">{ history.Job.Config.Name }</p>
|
<p class="text-sm font-medium text-primary-600 dark:text-primary-400 truncate">{ history.Job.Config.Name }</p>
|
||||||
if history.Status == "completed" {
|
if history.Status == "completed" {
|
||||||
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-300">
|
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-300">
|
||||||
<i class="fas fa-check mr-1"></i> Completed
|
Completed
|
||||||
</span>
|
</span>
|
||||||
} else if history.Status == "failed" {
|
} else if history.Status == "failed" {
|
||||||
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-300">
|
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-300">
|
||||||
<i class="fas fa-times mr-1"></i> Failed
|
Failed
|
||||||
</span>
|
</span>
|
||||||
} else {
|
} else {
|
||||||
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-300">
|
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-300">
|
||||||
<i class="fas fa-sync-alt mr-1"></i> { history.Status }
|
{ history.Status }
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -288,12 +288,10 @@ templ Jobs(ctx context.Context, data JobsData) {
|
|||||||
</p>
|
</p>
|
||||||
if job.Enabled {
|
if job.Enabled {
|
||||||
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-300">
|
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-300">
|
||||||
<i class="fas fa-check-circle mr-1"></i>
|
|
||||||
Active
|
Active
|
||||||
</span>
|
</span>
|
||||||
} else {
|
} else {
|
||||||
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-secondary-100 dark:bg-secondary-700 text-secondary-800 dark:text-secondary-300">
|
<span class="ml-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-secondary-100 dark:bg-secondary-700 text-secondary-800 dark:text-secondary-300">
|
||||||
<i class="fas fa-pause-circle mr-1"></i>
|
|
||||||
Inactive
|
Inactive
|
||||||
</span>
|
</span>
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-7
@@ -29,7 +29,7 @@ templ Layout(title string) {
|
|||||||
|
|
||||||
templ LayoutWithContext(title string, ctx context.Context) {
|
templ LayoutWithContext(title string, ctx context.Context) {
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" class="light h-full">
|
<html lang="en" class="light h-full p-0 m-0">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8"/>
|
<meta charset="UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"/>
|
||||||
@@ -128,6 +128,14 @@ templ LayoutWithContext(title string, ctx context.Context) {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style type="text/tailwindcss">
|
<style type="text/tailwindcss">
|
||||||
|
/* Reset default browser margins and padding */
|
||||||
|
html, body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
overflow-x: hidden; /* Prevent horizontal scrolling */
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
@layer components {
|
@layer components {
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
@apply px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-all duration-200 shadow-md hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2;
|
@apply px-4 py-2 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-all duration-200 shadow-md hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2;
|
||||||
@@ -277,9 +285,9 @@ templ LayoutWithContext(title string, ctx context.Context) {
|
|||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">
|
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="min-h-screen flex flex-col bg-secondary-50 dark:bg-secondary-900 h-full">
|
<body class="min-h-screen flex flex-col bg-secondary-50 dark:bg-secondary-900 h-full p-0 m-0">
|
||||||
if isLoggedIn(ctx) {
|
if isLoggedIn(ctx) {
|
||||||
<nav class="bg-white dark:bg-secondary-800 shadow-sm sticky top-0 z-10">
|
<nav class="bg-white dark:bg-secondary-800 shadow-sm sticky top-0 z-10 w-full">
|
||||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div class="flex justify-between h-16">
|
<div class="flex justify-between h-16">
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
@@ -381,9 +389,9 @@ templ LayoutWithContext(title string, ctx context.Context) {
|
|||||||
x-transition:leave="transition ease-in duration-150"
|
x-transition:leave="transition ease-in duration-150"
|
||||||
x-transition:leave-start="opacity-100 transform translate-y-0"
|
x-transition:leave-start="opacity-100 transform translate-y-0"
|
||||||
x-transition:leave-end="opacity-0 transform -translate-y-2"
|
x-transition:leave-end="opacity-0 transform -translate-y-2"
|
||||||
class="sm:hidden bg-white dark:bg-secondary-800 shadow-md"
|
class="sm:hidden bg-white dark:bg-secondary-800 shadow-md w-full left-0 right-0"
|
||||||
>
|
>
|
||||||
<div class="px-2 pt-2 pb-3 space-y-1">
|
<div class="max-w-7xl mx-auto px-2 pt-2 pb-3 space-y-1">
|
||||||
<a href="/dashboard" class="block px-3 py-2 rounded-md text-base font-medium text-secondary-700 dark:text-secondary-300 hover:bg-primary-50 dark:hover:bg-secondary-700 hover:text-primary-600 dark:hover:text-primary-400">
|
<a href="/dashboard" class="block px-3 py-2 rounded-md text-base font-medium text-secondary-700 dark:text-secondary-300 hover:bg-primary-50 dark:hover:bg-secondary-700 hover:text-primary-600 dark:hover:text-primary-400">
|
||||||
<i class="fas fa-tachometer-alt mr-2"></i> Dashboard
|
<i class="fas fa-tachometer-alt mr-2"></i> Dashboard
|
||||||
</a>
|
</a>
|
||||||
@@ -434,8 +442,8 @@ templ LayoutWithContext(title string, ctx context.Context) {
|
|||||||
|
|
||||||
if isLoggedIn(ctx) {
|
if isLoggedIn(ctx) {
|
||||||
<!-- Mobile Bottom Navigation -->
|
<!-- Mobile Bottom Navigation -->
|
||||||
<div class="sm:hidden fixed bottom-0 left-0 right-0 bg-white dark:bg-secondary-800 border-t border-secondary-200 dark:border-secondary-700 shadow-lg mobile-nav-container z-10">
|
<div class="sm:hidden fixed bottom-0 left-0 right-0 bg-white dark:bg-secondary-800 border-t border-secondary-200 dark:border-secondary-700 shadow-lg w-full p-0 m-0">
|
||||||
<div class="grid grid-cols-5 h-16">
|
<div class="grid grid-cols-6 h-16">
|
||||||
<a href="/dashboard" class="flex flex-col items-center justify-center text-secondary-500 dark:text-secondary-400 hover:text-primary-600 dark:hover:text-primary-400">
|
<a href="/dashboard" class="flex flex-col items-center justify-center text-secondary-500 dark:text-secondary-400 hover:text-primary-600 dark:hover:text-primary-400">
|
||||||
<i class="fas fa-tachometer-alt text-lg"></i>
|
<i class="fas fa-tachometer-alt text-lg"></i>
|
||||||
<span class="text-xs mt-1">Dashboard</span>
|
<span class="text-xs mt-1">Dashboard</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user