Split GitPushService into smaller classes and workers
This class is way too big for its own good. For example, there's no need for it to update a project's main language in the same job/thread/process as the other work. More importantly, performance shouldn't directly depend on the order in which code is executed (which it does right now).
This service class should do only two things:
- Update Git related data (e.g. commit counts)
- Schedule other work in Sidekiq
This means that updating CI data, the main language, etc, all happens in different workers.
This has two big benefits:
- GitPushService becomes smaller and easier to test
- Each worker only does a small thing and due to being isolated won't affect others (as much as they can do now at least)
This isn't really different from making methods smaller.