mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	This commit adds a database migration to set is_recently_active=False for channels based on the last time a message was sent. The migration follows the same logic used in the `update_channel_recently_active_status` management command. This change is particularly useful for self-hosted servers, as it avoids the need to wait a week for the `update_channel_recently_active_status` management command to run via cron.
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Generated by Django 5.0.9 on 2024-12-23 10:03
 | 
						|
 | 
						|
from datetime import timedelta
 | 
						|
 | 
						|
from django.db import migrations, transaction
 | 
						|
from django.db.backends.base.schema import BaseDatabaseSchemaEditor
 | 
						|
from django.db.migrations.state import StateApps
 | 
						|
from django.utils.timezone import now as timezone_now
 | 
						|
 | 
						|
 | 
						|
def check_update_all_channels_active_status(
 | 
						|
    apps: StateApps, schema_editor: BaseDatabaseSchemaEditor
 | 
						|
) -> None:
 | 
						|
    Channel = apps.get_model("zerver", "Stream")
 | 
						|
    Message = apps.get_model("zerver", "Message")
 | 
						|
    Realm = apps.get_model("zerver", "Realm")
 | 
						|
    Recipient = apps.get_model("zerver", "Recipient")
 | 
						|
 | 
						|
    Recipient.STREAM = 2
 | 
						|
    Channel.LAST_ACTIVITY_DAYS_BEFORE_FOR_ACTIVE = 180
 | 
						|
 | 
						|
    date_days_ago = timezone_now() - timedelta(days=Channel.LAST_ACTIVITY_DAYS_BEFORE_FOR_ACTIVE)
 | 
						|
 | 
						|
    for realm in Realm.objects.filter(deactivated=False):
 | 
						|
        with transaction.atomic(durable=True):
 | 
						|
            active_channel_ids = (
 | 
						|
                Message.objects.filter(
 | 
						|
                    date_sent__gte=date_days_ago,
 | 
						|
                    recipient__type=Recipient.STREAM,
 | 
						|
                    realm=realm,
 | 
						|
                )
 | 
						|
                .values_list("recipient__type_id", flat=True)
 | 
						|
                .distinct()
 | 
						|
            )
 | 
						|
 | 
						|
            channels_to_mark_inactive_queryset = Channel.objects.filter(
 | 
						|
                is_recently_active=True, realm=realm
 | 
						|
            ).exclude(id__in=active_channel_ids)
 | 
						|
            channels_to_mark_inactive_queryset.update(is_recently_active=False)
 | 
						|
 | 
						|
 | 
						|
class Migration(migrations.Migration):
 | 
						|
    atomic = False
 | 
						|
 | 
						|
    dependencies = [
 | 
						|
        ("zerver", "0643_realm_scheduled_deletion_date"),
 | 
						|
    ]
 | 
						|
 | 
						|
    operations = [
 | 
						|
        migrations.RunPython(
 | 
						|
            check_update_all_channels_active_status,
 | 
						|
            elidable=True,
 | 
						|
            reverse_code=migrations.RunPython.noop,
 | 
						|
        )
 | 
						|
    ]
 |