Folder Content Report
List folder contents, write a CSV and/or send a markdown email.
This flow interestingly demonstrates various capacities of Cells Flows:
- Use Golang templating to generate proper CSV or Markdown format based on actions input (in "Write To CSV File" and "Email In Markdown" actions)
- Use custom filters "Free Condition" to trigger an action based on the job-level parameter.
Parameters
Name | Type | Default | Mandatory | Description |
---|---|---|---|---|
Folder | text | pydiods1 | true | Path to folder where to list contents. |
CsvPathPrefix | text | personal/admin/Listing- | false | Prefix used to generated CSV. Current date and CSV extension will be appended. |
EmailToUser | text | admin | false | Send report by email (enter user Login). |
Trigger Type
Manual
JSON Representation
{
"Label": "Folder Content Report",
"Owner": "pydio.system.user",
"Metadata": {
"Description": "List folder contents, write a CSV and/or send a markdown email",
"Icon": "mdi mdi-format-list-bulleted",
"TplCategory": "analytics",
"Usage": "This flow interestingly demonstrates various capacities of Cells Flows: \n\n * Use Golang templating to generate proper CSV or Markdown format based on actions input (in \"Write To CSV File\" and \"Email In Markdown\" actions)\n * Use custom filters \"Free Condition\" to trigger an action based on the job-level parameter."
},
"Custom": true,
"Actions": [
{
"ID": "actions.scheduler.log-input",
"Label": "Collect nodes",
"NodesSelector": {
"Query": {
"SubQueries": [
{
"type_url": "type.googleapis.com/tree.Query",
"value": "Chl7ey5Kb2JQYXJhbWV0ZXJzLkZvbGRlcn19"
}
],
"Operation": 1
},
"Collect": true,
"Label": "List all files/folders"
},
"Parameters": {
"message": "",
"taskLogger": "true"
},
"ChainedActions": [
{
"ID": "actions.tree.put",
"Label": "Write To CSV File",
"NodesFilter": {
"Query": {
"SubQueries": [
{
"type_url": "type.googleapis.com/tree.Query",
"value": "OgYucHlkaW9wAQ=="
}
]
},
"Label": "Filter out .pydio"
},
"ActionOutputFilter": {
"Query": {
"SubQueries": [
{
"type_url": "type.googleapis.com/jobs.ActionOutputSingleQuery",
"value": "ajt7e2lmIC5Kb2JQYXJhbWV0ZXJzLkNzdlBhdGhQcmVmaXh9fXRydWV7e2Vsc2V9fWZhbHNle3tlbmR9fQ=="
}
]
},
"Label": "Stop if CSVPathPrefix is empty"
},
"Parameters": {
"contents": "{{$prefix:=.JobParameters.Folder}}\"Name\";\"Type\";\"Size\";\"Modified\";{{range .Input.Nodes}}\n\"{{.Path | trimPrefix $prefix | trimPrefix \"/\"}}\";\"{{if eq .Type 1}}File{{else}}Folder{{end}}\";\"{{.Size}}\";\"{{.MTime | fromStamp}}\";{{end}}",
"fieldname": "{\"@value\":\"FreeCondition\"}",
"target_file": "{{.JobParameters.CsvPathPrefix}}{{now | date \"2006-01-02\"}}.csv"
}
},
{
"ID": "actions.cmd.sendmail",
"Label": "Email in Markdown",
"NodesFilter": {
"Query": {
"SubQueries": [
{
"type_url": "type.googleapis.com/tree.Query",
"value": "OgYucHlkaW9wAQ=="
}
]
},
"Label": "Filter out .pydio"
},
"ActionOutputFilter": {
"Query": {
"SubQueries": [
{
"type_url": "type.googleapis.com/jobs.ActionOutputSingleQuery",
"value": "ajl7e2lmIC5Kb2JQYXJhbWV0ZXJzLkVtYWlsVG9Vc2VyfX10cnVle3tlbHNlfX1mYWxzZXt7ZW5kfX0="
}
]
},
"Label": "Stop if EmailToUser parameter is empty"
},
"Parameters": {
"fieldname": "{\"@value\":\"PathPrefix\"}",
"message": "{{$prefix:=\"pydiods1\"}}|Type|Name|Size|Modified Since|\n|---|---|---|---|\n{{range .Input.Nodes}}|{{if eq .Type 1}}File{{else}}Folder{{end}}|{{.Path| trimPrefix \"pydiods1/\"}}|{{.Size}}|{{.MTime | fromStamp | ago}}|\n{{end}}",
"subject": "Content listing of {{.JobParameters.Folder}}",
"to-mail": "",
"to-user": "{{.JobParameters.EmailToUser}}"
}
}
]
}
],
"Parameters": [
{
"Name": "Folder",
"Description": "Path to folder where to list contents.",
"Value": "pydiods1",
"Mandatory": true,
"Type": "text"
},
{
"Name": "CsvPathPrefix",
"Description": "Prefix used to generated CSV. Current date and CSV extension will be appended.",
"Value": "personal/admin/Listing-",
"Type": "text"
},
{
"Name": "EmailToUser",
"Description": "Send report by email (enter user Login).",
"Value": "admin",
"Type": "text"
}
]
}
Back to top