Skip to main content

Alliance Auth AFAT — Another Fleet Activity Tracker

Version License Python Django pre-commit pre-commit.ci status Code Style: black Automated Checks codecov Translation status Contributor Covenant Discord Alliance Auth Compatibility

ko-fi

An Improved FAT/PAP System for Alliance Auth.



Features and Highlights

  • Automatic tracking of participation on FAT links created via ESI
  • Multiple ESI fleets (with your alts)
  • Manually end ESI tracking per fleet
  • Fleet type classification (can be added in the admin backend)
  • Ship type overview per FAT link
  • Graphical statistics views
  • Re-open FAT link if the FAT link has expired and is within the defined grace time (only for clickable FAT links)
  • Manually add pilots to clickable FAT links, in case they missed clicking the link (for a period of 24 hours after the FAT links original expiry time)
  • Log for the following actions (Logs are kept for a certain time, 60 days per default):
    • Create FAT link
    • Change FAT link
    • Remove FAT link
    • Re-open FAT link
    • Manually add pilot to FAT link
    • Remove pilot from FAT link
  • Smart filter for integration with Secure Groups
    • FATs in time period

AFAT will work alongside the built-in native FAT System and ImicusFAT. However, data doesn't share, but you can migrate their data to AFAT, for more information, see below.

Screenshots

Dashboard

Dashboard

Fat Link List

Fat Link Details

Add Fat Link View for FCs

Smart Filter: FATs in Time Period

Smart Filter: FATs in Time Period

Installation

Bare Metal Installation

Step 1: Install the App

Make sure you're in the virtual environment (venv) of your Alliance Auth installation. Then install the latest version:

pip install allianceauth-afat==6.3.0

Step 2: Update Your AA Settings

Configure your AA settings in your local.py as follows:

  • Modify INSTALLED_APPS to include the following entries

    INSTALLED_APPS += [
        # ...
        "eve_sde",  # Only if not already added for another app
        "afat",
        # ...
    ]
    
    # This line right below the `INSTALLED_APPS` list, and only if not already added for another app
    INSTALLED_APPS = ["modeltranslation"] + INSTALLED_APPS
    
  • Add the Scheduled Tasks

    # AFAT - https://github.com/ppfeufer/allianceauth-afat
    if "afat" in INSTALLED_APPS:
        CELERYBEAT_SCHEDULE["afat_update_esi_fatlinks"] = {
            "task": "afat.tasks.update_esi_fatlinks",
            "schedule": crontab(minute="*/1"),
        }
    
        CELERYBEAT_SCHEDULE["afat_logrotate"] = {
            "task": "afat.tasks.logrotate",
            "schedule": crontab(minute="0", hour="1"),
        }
    
    if "eve_sde" in INSTALLED_APPS:
        # Run at 12:00 each day
        CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
            "task": "eve_sde.tasks.check_for_sde_updates",
            "schedule": crontab(minute="0", hour="12"),
        }
    
        # Set the following when you have a bare metal installation, or Docker with a
        # non-standard storage for `myauth`
        ESDE_TASK_SPLIT = True
    

Step 3: Finalizing the Installation

Run migrations, copy static files and load EVE SDE data

python manage.py collectstatic
python manage.py migrate
python manage.py esde_load_sde

Docker Installation

Step 1: Add the App

Add the app to your conf/requirements.txt:

allianceauth-afat==6.3.0

Step 2: Update Your AA Settings

Configure your AA settings (conf/local.py) as follows:

  • Modify INSTALLED_APPS to include the following entries

    INSTALLED_APPS += [
        # ...
        "eve_sde",  # Only if not already added for another app
        "afat",
        # ...
    ]
    
    # This line right below the `INSTALLED_APPS` list, and only if not already added for another app
    INSTALLED_APPS = ["modeltranslation"] + INSTALLED_APPS
    
  • Add the Scheduled Tasks

    # AFAT - https://github.com/ppfeufer/allianceauth-afat
    if "afat" in INSTALLED_APPS:
        CELERYBEAT_SCHEDULE["afat_update_esi_fatlinks"] = {
            "task": "afat.tasks.update_esi_fatlinks",
            "schedule": crontab(minute="*/1"),
        }
    
        CELERYBEAT_SCHEDULE["afat_logrotate"] = {
            "task": "afat.tasks.logrotate",
            "schedule": crontab(minute="0", hour="1"),
        }
    
    if "eve_sde" in INSTALLED_APPS:
        # Run at 12:00 each day
        CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
            "task": "eve_sde.tasks.check_for_sde_updates",
            "schedule": crontab(minute="0", hour="12"),
        }
    
        # Set the following when you have a bare metal installation, or Docker with a
        # non-standard storage for `myauth`
        ESDE_TASK_SPLIT = True
    

Step 3: Build Auth and Restart Your Containers

docker compose build --no-cache
docker compose --env-file=.env up -d

Step 4: Finalizing the Installation

Run migrations, copy static files and load EVE SDE data:

docker compose exec allianceauth_gunicorn bash

auth collectstatic
auth migrate
auth esde_load_sde

Updating

Bare Metal Installation

To update your existing installation of AFAT, first enable your virtual environment (venv) of your Alliance Auth installation.

pip install allianceauth-afat==6.3.0

python manage.py collectstatic
python manage.py migrate

redis-cli flushall

Finally, restart your supervisor services for AA

Docker Installation

To update your existing installation of AFAT, all you need to do is to update the respective line in your conf/requirements.txt file to the latest version.

allianceauth-afat==6.3.0

Now rebuild your containers:

docker compose build
docker compose --env-file=.env up -d

After that, run the following commands to update your database and static files:

docker compose exec allianceauth_gunicorn bash

auth collectstatic
auth migrate

Common Steps

It is possible that some versions need some more changes. Always read the release notes to find out more.

Data Migration

Right after the initial installation and running migrations, you can import the data from Alliance Auth's native FAT system if you have used it until now.

Import From Native FAT

To import from the native FAT module, run the following:

Bare Metal Installation

python myauth/manage.py afat_import_from_allianceauth_fat

Docker Installation

docker compose exec allianceauth_gunicorn bash

auth afat_import_from_allianceauth_fat

Settings

To customize the module, the following settings can be managed in your admin backend:

Setting Description Default Value
Use doctrines from fittings module Whether to use the doctrines from the Fittings modules in the doctrine dropdown or from AFATs own doctrine list. (Note: The fittings module needs to be installed for this.) No
Default FAT link expiry time Default expiry time for clickable FAT links in Minutes 60
Default FAT link reopen grace time Time in minutes a FAT link can be re-opened after it has expired 60
Default FAT link reopen duration Time in minutes a FAT link is re-opened 60
Default log duration Time in days before log entries are being removed from the DB 60

Permissions

Name Description Notes
basic_access Can access the AFAT module Your line member probably want this permission, so they can see the module and click the FAT links they are given. They also can see their own statistics with this permission.
manage_afat Can manage the AFAT module Your Military lead probably should get this permission
add_fatlink Can create FAT Links Your regular FC or who ever should be able to add FAT links should have this permission
stats_corporation_own Can see own corporation statistics
stats_corporation_other Can see statistics of other corporations
logs_view Can view the modules logs

Changelog

To keep track of all changes, please read the Changelog.

Translation Status

Translation status

Do you want to help translate this app into your language or improve the existing translation? - Join our team of translators!

Contributing

You want to contribute to this project? That's cool!

Please make sure to read the contribution guidelines.
(I promise, it's not much, just some basics)

Credits

AFAT is maintained by @ppfeufer and is based on ImicusFAT by @exiom with @Aproia and @ppfeufer which is based on allianceauth-bfat by @colcrunch

Both of these modules are no longer maintained and are deprecated. Both modules will not run with the latest stable releases of Alliance Auth.

Metadata

Release files for allianceauth-afat 6.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for allianceauth-afat 6.3.0
File Size Uploaded
allianceauth_afat-6.3.0.tar.gz 331.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for allianceauth-afat 6.3.0
File Interpreter ABI Platform
allianceauth_afat-6.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 763.9 kB

Release files / allianceauth_afat-6.3.0.tar.gz

Download URL allianceauth_afat-6.3.0.tar.gz
Size 331.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a5bcd6e1ad54339370a31c73deb04e6e43ee38122e5a8092dad9049d928b9936
BLAKE2b-256 checksum
How to use checksums
94f25d6c5aad171696c363040abb9367a1dbf64541f149f6cb8fab4e2293394c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / allianceauth_afat-6.3.0-py3-none-any.whl

Download URL allianceauth_afat-6.3.0-py3-none-any.whl
Size 432.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c9c85e910461bb9ea07ab327151fcf4914a7041f64c51735045c2e0864fe7b19
BLAKE2b-256 checksum
How to use checksums
87ce892977281013ee72c4c84ed14a7fac865ce4ac71b973e7385e1ce868913e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

6.3.0 This release

2 release files

6.2.1

2 release files

6.2.0

2 release files

6.1.1

2 release files

6.1.0

2 release files

6.0.0

2 release files

5.2.0

2 release files

5.1.0

2 release files

5.0.3

2 release files

5.0.2

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.4.0

2 release files

4.3.2

2 release files

4.3.1

2 release files

4.3.0

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.2

2 release files

4.1.1

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.12.2

2 release files

3.12.0

2 release files

3.9.1

2 release files

3.9.0

2 release files

3.8.2

2 release files

3.8.1

2 release files

3.8.0

2 release files

3.7.2

2 release files

3.7.1

2 release files

3.7.0

2 release files

3.6.1

2 release files

3.6.0

2 release files

3.5.5

2 release files

3.5.4

2 release files

3.5.3

2 release files

3.5.2

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.13.0

2 release files

2.12.2

2 release files

2.12.1

2 release files

2.12.0

2 release files

2.11.3

2 release files

2.11.2

2 release files

2.10.2

2 release files

2.10.1

2 release files

2.9.7

2 release files

2.9.6

2 release files

2.9.5

2 release files

2.9.4

2 release files

2.9.3

2 release files

2.9.2

2 release files

2.9.1

2 release files

2.9.0

2 release files

2.8.6

2 release files

2.8.5

2 release files

2.8.4

2 release files

2.8.3

2 release files

2.8.2

2 release files

2.8.1

2 release files

2.8.0

2 release files

2.7.0

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.3.3

2 release files

2.3.2

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.20

2 release files

2.2.19

2 release files

2.2.18

2 release files

2.2.17

2 release files

2.2.16

2 release files

2.2.12

2 release files

2.2.11

2 release files

2.2.9

2 release files

2.2.8

2 release files

2.2.7

2 release files

2.2.6

2 release files

2.2.5

2 release files

2.2.4

2 release files

2.2.3

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.10.0

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page