コード例 #1
0
async def real_init():
    """
    Runs async to avoid timeouts
    """
    if tasks:
        return

    n = e = t = 0
    list = await serverboards.maybe_await(serverboards.service.list())

    print("Checking %d service status" % len(list))

    # Launch all in parallel
    mtasks = []
    for service in list:
        task = await curio.spawn(inserted_service, service)
        mtasks.append(task)

    for task in mtasks:
        t += 1
        try:
            ok = await task.join()
            if ok:
                n += 1
        except Exception as exc:
            import traceback
            traceback.print_exc()
            serverboards.log_traceback(exc)
            e += 1
    await serverboards.info(
        "Service up stats -- UP: %d DOWN: %s NO INFO: %d TOTAL: %d" %
        (n, e, t - (n + e), t))
    if e:
        await serverboards.error(
            "There were errors on %d up service checkers" % e)
コード例 #2
0
async def remove_service(service, *args, **kwargs):
    uuid = service["uuid"]
    print("Remove service from periodic checks", uuid)
    tid = tasks.get(uuid)
    if tid:
        await tid.cancel()
        del tasks[uuid]
コード例 #3
0
async def real_init():
    """
    Runs async to avoid timeouts
    """
    if tasks:
        return

    n = e = t = 0
    list = await serverboards.maybe_await(serverboards.service.list())

    print("Checking %d service status" % len(list))

    # Launch all in parallel
    mtasks = []
    for service in list:
        task = await curio.spawn(inserted_service, service)
        mtasks.append(task)

    for task in mtasks:
        t += 1
        try:
            ok = await task.join()
            if ok:
                n += 1
        except Exception as exc:
            import traceback
            traceback.print_exc()
            serverboards.log_traceback(exc)
            e += 1
    await serverboards.info(
        "Service up stats -- UP: %d DOWN: %s NO INFO: %d TOTAL: %d" %
        (n, e, t - (n + e), t))
    if e:
        await serverboards.error(
            "There were errors on %d up service checkers" % e)
コード例 #4
0
async def remove_service(service, *args, **kwargs):
    uuid = service["uuid"]
    print("Remove service from periodic checks", uuid)
    tid = tasks.get(uuid)
    if tid:
        await tid.cancel()
        del tasks[uuid]
コード例 #5
0
def create_campaign(account_id, name, objective, status):
    account = AdAccount(account_id)

    campaign = Campaign(parent_id=account.get_id_assured())
    campaign[Campaign.Field.name] = name
    campaign[Campaign.Field.objective] = objective
    campaign[Campaign.Field.configured_status] = status

    print(campaign.remote_create())
コード例 #6
0
async def install(plugin_id):
    try:
        res = await curio.subprocess.check_output(
            ["s10s", "plugin", "install", "--format=json", plugin_id])
    except curio.subprocess.CalledProcessError as e:
        print(e.output)
        raise

    return json_loads(res)
コード例 #7
0
async def logout():
    try:
        res = await curio.subprocess.check_output(
            ["s10s", "plugin", "logout", "--format=json"])
    except curio.subprocess.CalledProcessError as e:
        print(e.output)
        raise

    return json_loads(res)
コード例 #8
0
async def remove(plugin_id, action_id=None):
    try:
        res = await curio.subprocess.check_output(
            ["s10s", "plugin", "remove", plugin_id, "--format=json"])
    except curio.subprocess.CalledProcessError as e:
        print(e.output)
        raise

    return json_loads(res)
コード例 #9
0
async def login(email, password):
    try:
        res = await curio.subprocess.check_output(
            ["s10s", "plugin", "login", email, password, "--format=json"],
            stdin=None)
    except curio.subprocess.CalledProcessError as e:
        print(e.output)
        raise

    return json_loads(res)
コード例 #10
0
async def search(*args, **kwargs):
    terms = list(args) + [
        "%s:%s" % x for x in kwargs.items() if not x[0].startswith('-')
    ]
    await serverboards.debug("Searching for components with: %s" % terms)

    cmd = [
        "s10s", "plugin", "search", "--format=json", *terms,
        "--fields=base,icon,icon64"
    ]
    print(cmd)
    result = await curio.subprocess.check_output(cmd)

    return json_loads(result)
コード例 #11
0
async def enable(plugin_id, action_id=None, enabled=True):
    try:
        action = None
        if enabled:
            action = "enable"
        else:
            action = "disable"
        res = await curio.subprocess.check_output(
            ["s10s", "plugin", action, plugin_id, "--format=json"])
    except curio.subprocess.CalledProcessError as e:
        print(e.output)
        raise

    return json_loads(res)
コード例 #12
0
 def send_sync():
     port = settings.get("port")
     ssl = settings.get("ssl")
     if port or ssl:
         if port == '465' or ssl:
             port = port or '465'
             smtp = smtplib.SMTP_SSL(settings["servername"], int(port))
         else:
             smtp = smtplib.SMTP(settings["servername"], int(port))
     else:
         smtp = smtplib.SMTP(settings["servername"])
     if settings.get("username"):
         print("Login as ", repr(settings))
         smtp.login(settings.get("username"), settings.get("password_pw"))
     smtp.sendmail(settings["from"], email, msg.as_string())
     smtp.close()
コード例 #13
0
 def send_sync():
     port = settings.get("port")
     ssl = settings.get("ssl")
     if port or ssl:
         if port == '465' or ssl:
             port = port or '465'
             smtp = smtplib.SMTP_SSL(settings["servername"], int(port))
         else:
             smtp = smtplib.SMTP(settings["servername"], int(port))
     else:
         smtp = smtplib.SMTP(settings["servername"])
     if settings.get("username"):
         print("Login as ", repr(settings))
         smtp.login(settings.get("username"), settings.get("password_pw"))
     smtp.sendmail(settings["from"], email, msg.as_string())
     smtp.close()
コード例 #14
0
def schema(config, table=None):
    print("Get table ", config, table)
    if not table:
        return ["random"]

    if table == "random":
        return {
            "columns": [
                {"name": "random", "description": "The random number"},
                {"name": "min", "description": "The minimum value"},
                {"name": "max", "description": "The maximum value"}
            ],
            "description": "A table with a single random number. Can be \
                            tweaked to be between a max a min."
        }
    raise Exception("unknown-table")
コード例 #15
0
async def check_updates(*plugins):
    """
    Checks for updates. If no plugins passed, checks them all.
    """
    try:
        await curio.subprocess.check_output(
            ["s10s", "plugin", "check", *plugins, "--format=json"])
        res = await curio.subprocess.check_output(
            ["s10s", "plugin", "list", "--format=json"])
        res = json_loads(res)
        if plugins:  # Not the most efficient. But works. Might be fixed with a "plugin info" command.
            res = [x for x in res if x["id"] in plugins]
    except curio.subprocess.CalledProcessError as e:
        print(e.output)
        raise

    return res
コード例 #16
0
def schema(config, table=None):
    print("Get table ", config, table)
    if not table:
        return ["random"]

    if table == "random":
        return {
            "columns": [{
                "name": "random",
                "description": "The random number"
            }, {
                "name": "min",
                "description": "The minimum value"
            }, {
                "name": "max",
                "description": "The maximum value"
            }],
            "description":
            "A table with a single random number. Can be \
                            tweaked to be between a max a min."
        }
    raise Exception("unknown-table")
コード例 #17
0
def create_creative(account_id, name, caption, message, link, imagehash,
                    page_id):
    from facebookads.adobjects.adcreativelinkdata import AdCreativeLinkData
    from facebookads.adobjects.adcreativeobjectstoryspec \
        import AdCreativeObjectStorySpec

    link_data = AdCreativeLinkData()
    link_data[AdCreativeLinkData.Field.message] = message
    link_data[AdCreativeLinkData.Field.link] = link
    link_data[AdCreativeLinkData.Field.caption] = caption
    link_data[AdCreativeLinkData.Field.image_hash] = imagehash

    object_story_spec = AdCreativeObjectStorySpec()
    object_story_spec[AdCreativeObjectStorySpec.Field.page_id] = page_id
    object_story_spec[AdCreativeObjectStorySpec.Field.link_data] = link_data

    creative = AdCreative(parent_id=account_id)
    creative[AdCreative.Field.name] = name
    creative[AdCreative.Field.object_story_spec] = object_story_spec
    creative.remote_create()

    print(creative)
    return creative
コード例 #18
0
def test():
    account = AdAccount(settings.AD_USER)
    adsets = account.get_ad_sets(fields=[
        AdSet.Field.name,
        AdSet.Field.bid_info,
        AdSet.Field.configured_status,
        AdSet.Field.daily_budget,
        AdSet.Field.targeting,
    ])
    print(adsets)

    users = account.get_ad_users()
    print(users)
    return
    for i in get_possible_insights():
        print(i)
        print(get_insights(i["value"]))
        # print()
        continue
コード例 #19
0
    async def test_async():
        print("Start debug")
        global settings
        settings = yaml.load(open("config.yaml"))
        # {
        #     "servername" : "mail.serverboards.io",
        #     "port" : "",
        #     "from" : "*****@*****.**",
        #     "username" : "",
        #     "password_pw" : ""
        # }
        sea = await send_email_action(
            "*****@*****.**",
            "This is a test from s10s test",
            "The body of the test",
            message_id="*****@*****.**",
        )
        print("email action", sea)
        assert sea == {"sent": True}

        se = await send_email(
            user={"email": "*****@*****.**"},
            config={},
            message={
                "subject": "This is a test message",
                "body": "Body of the test message\n\nAnother line",
                "extra": {}
            },
            test=True,
            message_id="*****@*****.**",
        )
        print("email to user", se)
        assert se

        print("Done")
        await serverboards.curio.sleep(2)
        sys.exit(0)
コード例 #20
0
    async def test_async():
        print("Start debug")
        global settings
        settings = yaml.load(open("config.yaml"))
        # {
        #     "servername" : "mail.serverboards.io",
        #     "port" : "",
        #     "from" : "*****@*****.**",
        #     "username" : "",
        #     "password_pw" : ""
        # }
        sea = await send_email_action(
            "*****@*****.**",
            "This is a test from s10s test",
            "The body of the test",
            message_id="*****@*****.**",
        )
        print("email action", sea)
        assert sea == {"sent": True}

        se = await send_email(
            user={"email": "*****@*****.**"},
            config={},
            message={
                "subject": "This is a test message",
                "body": "Body of the test message\n\nAnother line",
                "extra": {}
            },
            test=True,
            message_id="*****@*****.**",
        )
        print("email to user", se)
        assert se

        print("Done")
        await serverboards.curio.sleep(2)
        sys.exit(0)
コード例 #21
0
import datetime
from facebookads.api import FacebookAdsApi
from facebookads.adobjects.adaccount import AdAccount
# from facebookads.adobjects.aduser import AdUser
from facebookads.adobjects.campaign import Campaign
from facebookads.adobjects.adsinsights import AdsInsights
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.ad import Ad
from facebookads.adobjects.adcreative import AdCreative
from serverboards_aio import print

try:
    import settings
    FacebookAdsApi.init(settings.APP_ID, settings.APP_SECRET,
                        settings.ACCESS_TOKEN)
    print("Using default config from settings.py")
except Exception:
    pass

# @serverboards.rpc_method
# def get_accounts():
#     def decorate(x):
#         return {
#             "value": x["id"],
#             "name": x["name"]
#         }
#     me = AdUser(settings.AD_USER)
#     return [decorate(x) for x in me.get_ad_accounts(["id", "name"])]


@serverboards.rpc_method
コード例 #22
0
async def test():
    print(await search(type="screen"))
コード例 #23
0
def extractor(config, table, quals, columns):
    print("Extractor", config, table, quals, columns)
    if table == "random":
        return extractor_random(quals, columns)
    raise Exception("unknown-table")
コード例 #24
0
@serverboards.rpc_method
def extractor(config, table, quals, columns):
    print("Extractor", config, table, quals, columns)
    if table == "random":
        return extractor_random(quals, columns)
    raise Exception("unknown-table")


def extractor_random(quals, columns):
    min = get_qual(quals, "min", "=", 0)
    max = get_qual(quals, "max", "=", 1)

    return {
        "columns": ["random", "min", "max"],
        "rows": [[min + random.random() * (max - min), min, max]]
    }


def get_qual(quals, col, op, default):
    for q in quals:
        if q[0] == col and q[1] == op:
            return q[2]
    return default


if __name__ == '__main__':
    # serverboards.set_debug()
    print("Starting", file=sys.stderr)
    serverboards.loop()
コード例 #25
0
async def get_account(config):
    service = await serverboards.service.get(config["service"])
    print(service)
    config = service["config"]
    return AdAccount(config["ad_user"])
コード例 #26
0
def extractor(config, table, quals, columns):
    print("Extractor", config, table, quals, columns)
    if table == "random":
        return extractor_random(quals, columns)
    raise Exception("unknown-table")
コード例 #27
0

@serverboards.rpc_method
def extractor(config, table, quals, columns):
    print("Extractor", config, table, quals, columns)
    if table == "random":
        return extractor_random(quals, columns)
    raise Exception("unknown-table")


def extractor_random(quals, columns):
    min = get_qual(quals, "min", "=", 0)
    max = get_qual(quals, "max", "=", 1)

    return {
        "columns": ["random", "min", "max"],
        "rows": [[min + random.random() * (max - min), min, max]]
    }


def get_qual(quals, col, op, default):
    for q in quals:
        if q[0] == col and q[1] == op:
            return q[2]
    return default

if __name__ == '__main__':
    # serverboards.set_debug()
    print("Starting", file=sys.stderr)
    serverboards.loop()