from sqlalchemy import Column, DateTime, String, Integer, Boolean from sqlalchemy import ForeignKey, func from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base from ee.core.logging import Log from ee.core.database import db_session from ee.core.fileutils import EEFileUtils from ee.cli.plugins.models import SiteDB import sys import glob def addNewSite(self, site, stype, cache, path, enabled=True, ssl=False, fs='ext4', db='mysql', db_name=None, db_user=None, db_password=None, db_host='localhost', hhvm=0, pagespeed=0): """ Add New Site record information into ee database. """ try: newRec = SiteDB(site, stype, cache, path, enabled, ssl, fs, db, db_name, db_user, db_password, db_host, hhvm, pagespeed) db_session.add(newRec) db_session.commit() except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to add site to database") def getSiteInfo(self, site): """ Retrieves site record from ee databse """ try: q = SiteDB.query.filter(SiteDB.sitename == site).first() return q except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to query database for site info") def updateSiteInfo(self, site, stype='', cache='', webroot='', enabled=True, ssl=False, fs='', db='', db_name=None, db_user=None, db_password=None, db_host=None, hhvm=None, pagespeed=None): """updates site record in database""" try: q = SiteDB.query.filter(SiteDB.sitename == site).first() except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to query database for site info") if not q: Log.error(self, "{0} does not exist in database".format(site)) # Check if new record matches old if not then only update database if stype and q.site_type != stype: q.site_type = stype if cache and q.cache_type != cache: q.cache_type = cache if q.is_enabled != enabled: q.is_enabled = enabled if ssl and q.is_ssl != ssl: q.is_ssl = ssl if db_name and q.db_name != db_name: q.db_name = db_name if db_user and q.db_user != db_user: q.db_user = db_user if db_user and q.db_password != db_password: q.db_password = db_password if db_host and q.db_host != db_host: q.db_host = db_host if webroot and q.site_path != webroot: q.site_path = webroot if hhvm and q.is_hhvm != hhvm: q.is_hhvm = hhvm if webroot and q.is_pagespeed != pagespeed: q.is_pagespeed = pagespeed try: q.created_on = func.now() db_session.commit() except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to update site info in application database.") def deleteSiteInfo(self, site): """Delete site record in database""" try: q = SiteDB.query.filter(SiteDB.sitename == site).first() except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to query database") if not q: Log.error(self, "{0} does not exist in database".format(site)) try: db_session.delete(q) db_session.commit() except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to delete site from application database.") def getAllsites(self): """ 1. returns all records from ee database """ try: q = SiteDB.query.all() return q except Exception as e: Log.debug(self, "{0}".format(e)) Log.error(self, "Unable to query database") class EESync(object): def __init__(self, app): self.app = app def syncdbinfo(self): """ 1. reads database information from wp/ee-config.php 2. updates records into ee database accordingly. """ sites = getAllsites(self) if not sites: pass for site in sites: if site.site_type in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: ee_site_webroot = site.site_path # Read config files configfiles = glob.glob(ee_site_webroot + '/*-config.php') if configfiles: if EEFileUtils.isexist(self, configfiles[0]): ee_db_name = (EEFileUtils.grep(self, configfiles[0], 'DB_NAME').split(',')[1] .split(')')[0].strip().replace('\'', '')) ee_db_user = (EEFileUtils.grep(self, configfiles[0], 'DB_USER').split(',')[1] .split(')')[0].strip().replace('\'', '')) ee_db_pass = (EEFileUtils.grep(self, configfiles[0], 'DB_PASSWORD').split(',')[1] .split(')')[0].strip().replace('\'', '')) ee_db_host = (EEFileUtils.grep(self, configfiles[0], 'DB_HOST').split(',')[1] .split(')')[0].strip().replace('\'', '')) if site.db_name != ee_db_name: # update records if any mismatch found Log.debug(self, "Updating {0}" .format(site.sitename)) updateSiteInfo(self, site.sitename, db_name=ee_db_name, db_user=ee_db_user, db_password=ee_db_pass, db_host=ee_db_host)