https://github.com/sowrensen/fileculator
Calculates total size of user uploaded files inside Laravel projects and writes output to public directory.
https://github.com/sowrensen/fileculator
bash filesize filesystem laravel python space storage
Last synced: about 2 months ago
JSON representation
Calculates total size of user uploaded files inside Laravel projects and writes output to public directory.
- Host: GitHub
- URL: https://github.com/sowrensen/fileculator
- Owner: sowrensen
- License: gpl-3.0
- Created: 2019-12-17T10:07:38.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-09-06T11:28:32.000Z (almost 6 years ago)
- Last Synced: 2025-04-09T18:43:04.104Z (about 1 year ago)
- Topics: bash, filesize, filesystem, laravel, python, space, storage
- Language: Python
- Homepage:
- Size: 34.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Fileculator
This scripts calculates the total size of the `storage/app`
directory (user uploaded files) of multiple **Laravel** apps.
Define the project `root` and `depth` in .env file and run
the script as a cron job.
Changelog
------
#### Version 2.0.0
- Added option to determine whole project size.
- Improved code structure.
- Added a `requirement.txt` file to work with usual virtualenv.
- Removed Pipenv support.
#### Version 1.0.1
- Fixed bug related to project root.
#### Version 1.0
- Initial release
Usage
------
### Setup
Run following commands in your terminal to copy this repository and for primary setup.
```
git clone https://github.com/sowrensen/fileculator.git
cd fileculator
python -m venv ./venv
. venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
```
### Environment Variables
Before you can run the script, you've to declare a few environment variables
in `.env` file. An example `.env` file has been added for your consistency.
Just copy the `.env.example` file as `.env` and define the values for the
following two keys.
- **PROJECT_ROOT**: This will be the directory where all of your Laravel
projects reside, e.g.` /home//project`s, or `/var/www`, or
`/usr/share/nginx`. Note that, if you keep your projects into
some place which is in root directory, you have to run the
script as root. You know how Linux works, right?
- **PROJECT_DEPTH** (1, 2): This key defines the searching depths for directories.
The value should be either 1 or 2. If you have subdirectories in your root
directory, you have to put 2, else put 1. For example, suppose this is the file
structure inside your `PROJECT_ROOT`:
```
App-1/
- App_1_Instance_1/
- App_1_Instance_2/
App-2/
- App_2_Instance_1/
- App_2_Instance_2/
```
In the above case, you have to put depth value 2. If there is only one
level of application directory, you can put 1.
- **STORAGE_ONLY** (0, 1): This key defines the size of the whole Laravel project
is to be calculate (including `vendor`, `node_modules` etc.) or only the storage
directory. The expected value should be either 0 or 1.
Output
------
The script calculates the total size (in bytes) of the `/storage/app` directory
inside each Laravel project and puts the storage information into a json file
named `storage.json` inside that directory which is Laravel's public directory.
Thus the generated file is ignored in any version control system. The data inside the
`storage.json` file looks like:
```
{
"size": 112,
"written_at": "2019-12-17 15:08:42.249758"
}
```
Laravel can use the information for various purposes. Since this is an expensive operation,
you should run the script as a cron job so that it doesn't interfere with HTTP response.
_Note that, the output file will be replaced during the next run_.
Cron Example
------------
You can run the file directly from cron job. However, if you face difficulties to run
pipenv from cron, better you create a bash script like this.
```
#!/bin/sh
FILECULATOR="/path/to/fileculator"
PYTHON="${FILECULATOR}/venv/bin/python"
SCRIPT="${FILECULATOR}/fileculator.py"
cd "${FILECULATOR}" && "${PYTHON}" "${SCRIPT}"
```
Make the bash script executable by running:
```shell
chmod +x fileculator.sh
```
Now run the bash script as cron job. This following cron job will run on every even hour and write the log into the defined log file.
```
0 */2 * * * /path/to/bash/fileculator.sh > /path/to/fileculator_output.log
```
If you don't want a log file:
```
0 */2 * * * /path/to/bash/fileculator.sh >/dev/null 2>&1
```