Browse Source

A better way of expiring gnusocial posts

Bob Mottram 9 years ago
parent
commit
ff7daa22ff
1 changed files with 59 additions and 9 deletions
  1. 59
    9
      src/freedombone

+ 59
- 9
src/freedombone View File

@@ -8913,15 +8913,6 @@ function install_gnu_social {
8913 8913
     fi
8914 8914
     echo "GNU Social onion domain:${MICROBLOG_ONION_HOSTNAME}" >> $COMPLETION_FILE
8915 8915
 
8916
-    # clear down the database periodically
8917
-    echo '$n = new Notice();' > /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/clear-database.php
8918
-    echo "\$n->whereAdd('created < NOW() - INTERVAL 1 YEAR');" >> /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/clear-database.php
8919
-    echo 'if ($n->find()) { while ($n->fetch()) { $n->deleteAs($n->getProfile()); } }' >> /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/clear-database.php
8920
-    echo 'exit' >> /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/clear-database.php
8921
-    echo '#!/bin/bash' > /etc/cron.weekly/clear-microblog-database
8922
-    echo "cat /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/clear-database.php | php /var/www/$MICROBLOG_DOMAIN_NAME/htdocs/scripts/console.php" >> /etc/cron.weekly/clear-microblog-database
8923
-    chmod +x /etc/cron.weekly/clear-microblog-database
8924
-
8925 8916
     # some post-install instructions for the user
8926 8917
     if ! grep -q $"Microblog administrator" /home/$MY_USERNAME/README; then
8927 8918
         echo '' >> /home/$MY_USERNAME/README
@@ -8939,6 +8930,64 @@ function install_gnu_social {
8939 8930
     echo 'install_gnu_social' >> $COMPLETION_FILE
8940 8931
 }
8941 8932
 
8933
+function expire_gnu_social_posts {
8934
+    # To prevent the database size from growing endlessly this script expires posts
8935
+    # after a number of months
8936
+    if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_MESH" ]]; then
8937
+        return
8938
+    fi
8939
+    if [ ! -d /var/www/$MICROBLOG_DOMAIN_NAME/htdocs ]; then
8940
+        return
8941
+    fi
8942
+
8943
+    gnusocial_expire_script=/usr/bin/gnusocial-expire
8944
+
8945
+    echo '<?php' > $gnusocial_expire_script
8946
+    echo '' >> $gnusocial_expire_script
8947
+    echo '// GNU Social post expiry script, based on StatExpire by Tony Baldwin' > $gnusocial_expire_script
8948
+    echo '// https://github.com/tonybaldwin/statexpire' > $gnusocial_expire_script
8949
+    echo '' >> $gnusocial_expire_script
8950
+    echo '$oldate=date(("Y-m-d"), strtotime("-3 months"));' >> $gnusocial_expire_script
8951
+    echo '$username="root";' >> $gnusocial_expire_script
8952
+    echo "\$password=file_get_contents(\"$DATABASE_PASSWORD_FILE\");" >> $gnusocial_expire_script
8953
+    echo '$database="gnusocial";' >> $gnusocial_expire_script
8954
+    echo '' >> $gnusocial_expire_script
8955
+    echo 'if (!$link = mysql_connect("localhost", $username, $password)) {' >> $gnusocial_expire_script
8956
+    echo '    echo "Could not connect to mariadb";' >> $gnusocial_expire_script
8957
+    echo '    exit;' >> $gnusocial_expire_script
8958
+    echo '}' >> $gnusocial_expire_script
8959
+    echo '' >> $gnusocial_expire_script
8960
+    echo 'if (!mysql_select_db($database, $link)) {' >> $gnusocial_expire_script
8961
+    echo '    echo "Could not select gnusocial database";' >> $gnusocial_expire_script
8962
+    echo '    exit;' >> $gnusocial_expire_script
8963
+    echo '}' >> $gnusocial_expire_script
8964
+    echo '' >> $gnusocial_expire_script
8965
+    echo "\$notice_query=\"DELETE FROM notice WHERE created <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_script
8966
+    echo "\$conversation_query=\"DELETE FROM conversation WHERE created <= '$oldate 01:01:01'\";" >> $gnusocial_expire_script
8967
+    echo "\$reply_query=\"DELETE FROM reply WHERE modified <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_script
8968
+    echo '' >> $gnusocial_expire_script
8969
+    echo 'mysql_query($notice_query);' >> $gnusocial_expire_script
8970
+    echo '$rowaff1=mysql_affected_rows();' >> $gnusocial_expire_script
8971
+    echo 'mysql_query($conversation_query);' >> $gnusocial_expire_script
8972
+    echo '$rowaff2=mysql_affected_rows();' >> $gnusocial_expire_script
8973
+    echo 'mysql_query($reply_query);' >> $gnusocial_expire_script
8974
+    echo '$rowaff3=mysql_affected_rows();' >> $gnusocial_expire_script
8975
+    echo 'mysql_close();' >> $gnusocial_expire_script
8976
+    echo '' >> $gnusocial_expire_script
8977
+    echo 'echo "Expire GNU Social posts: $rowaff1 notices, $rowaff2 conversations, and $rowaff3 replies deleted from database.\n";' >> $gnusocial_expire_script
8978
+    chmod +x $gnusocial_expire_script
8979
+
8980
+    # Add a cron job
8981
+    if ! grep -q "$gnusocial_expire_script" /etc/crontab; then
8982
+        echo "10 3 *   *   *   root /usr/bin/timeout 500 /usr/bin/php $gnusocial_expire_script" >> /etc/crontab
8983
+    fi
8984
+
8985
+    # remove old expire script
8986
+    if [ -f /etc/cron.weekly/clear-microblog-database ]; then
8987
+        rm /etc/cron.weekly/clear-microblog-database
8988
+    fi
8989
+}
8990
+
8942 8991
 function install_gnu_social_theme {
8943 8992
     if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_MAILBOX" || $SYSTEM_TYPE == "$VARIANT_CHAT" || $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_MESH" ]]; then
8944 8993
         return
@@ -10490,6 +10539,7 @@ install_wiki
10490 10539
 install_blog
10491 10540
 mark_blog_domain
10492 10541
 install_gnu_social
10542
+expire_gnu_social_posts
10493 10543
 install_gnu_social_theme
10494 10544
 install_rss_reader
10495 10545
 install_rss_mobile_reader