Currently when a plugin errors, it gets autodisabled. This is however completely silent and easy to miss. The result can be degraded data quality or a hole in data in case of export plugins – something to be fixed ASAP.

A PagerDuty integration could come in useful here, allowing an alert to be sent in case of a plugin getting disabled. PagerDuty is tailored for this kind of thing, so this would potentially be better than e.g. an email – that could be easily missed in a sea of emails.

This problem was brought up by a current user of our Snowflake Export Plugin.
posthog/models/plugin.py
is_preinstalled: models.BooleanField = models.BooleanField(default=False)
    is_stateless: models.BooleanField = models.BooleanField(
        default=False, null=True, blank=True
    )  
    name: models.CharField = models.CharField(max_length=200, null=True, blank=True)
    description: models.TextField = models.TextField(null=True, blank=True)
    url: models.CharField = models.CharField(max_length=800, null=True, blank=True)
    
    
    config_schema: models.JSONField = models.JSONField(default=dict)
    tag: models.CharField = models.CharField(max_length=200, null=True, blank=True)
    archive: models.BinaryField = models.BinaryField(blank=True, null=True)
    latest_tag: models.CharField = models.CharField(max_length=800, null=True, blank=True)
    latest_tag_checked_at: models.DateTimeField = models.DateTimeField(null=True, blank=True)
    capabilities: models.JSONField = models.JSONField(default=dict)
    metrics: models.JSONField = models.JSONField(default=dict, null=True)
    public_jobs: models.JSONField = models.JSONField(default=dict, null=True)
    
    error: models.JSONField = models.JSONField(default=None, null=True)
    
    from_json: models.BooleanField = models.BooleanField(default=False)
    
    from_web: models.BooleanField = models.BooleanField(default=False)
    
    source: models.TextField = models.TextField(blank=True, null=True)
    created_at: models.DateTimeField = models.DateTimeField(auto_now_add=True)
    updated_at: models.DateTimeField = models.DateTimeField(null=True, blank=True)
    log_level: models.IntegerField = models.IntegerField(null=True, blank=True)
    objects: PluginManager = PluginManager()
    def get_default_config(self) -> Dict[str, Any]: