From 9ef1e69ae0a62a03b5924ea2f534f0a9ea213845 Mon Sep 17 00:00:00 2001
From: Louis Lam <louislam@users.noreply.github.com>
Date: Wed, 13 Sep 2023 20:03:12 +0800
Subject: [PATCH] Push Examples (#3735)

---
 extra/push-examples/.gitignore                |  3 ++
 extra/push-examples/bash-curl/index.sh        |  9 ++++++
 extra/push-examples/csharp/index.cs           | 24 ++++++++++++++
 extra/push-examples/go/index.go               | 20 ++++++++++++
 extra/push-examples/java/index.java           | 32 +++++++++++++++++++
 extra/push-examples/javascript-fetch/index.js | 10 ++++++
 .../javascript-fetch/package.json             |  5 +++
 extra/push-examples/php/index.php             | 14 ++++++++
 extra/push-examples/powershell/index.ps1      |  8 +++++
 extra/push-examples/python/index.py           | 11 +++++++
 .../push-examples/typescript-fetch/README.md  | 19 +++++++++++
 extra/push-examples/typescript-fetch/index.ts | 10 ++++++
 .../typescript-fetch/package.json             | 13 ++++++++
 13 files changed, 178 insertions(+)
 create mode 100644 extra/push-examples/.gitignore
 create mode 100644 extra/push-examples/bash-curl/index.sh
 create mode 100644 extra/push-examples/csharp/index.cs
 create mode 100644 extra/push-examples/go/index.go
 create mode 100644 extra/push-examples/java/index.java
 create mode 100644 extra/push-examples/javascript-fetch/index.js
 create mode 100644 extra/push-examples/javascript-fetch/package.json
 create mode 100644 extra/push-examples/php/index.php
 create mode 100644 extra/push-examples/powershell/index.ps1
 create mode 100644 extra/push-examples/python/index.py
 create mode 100644 extra/push-examples/typescript-fetch/README.md
 create mode 100644 extra/push-examples/typescript-fetch/index.ts
 create mode 100644 extra/push-examples/typescript-fetch/package.json

diff --git a/extra/push-examples/.gitignore b/extra/push-examples/.gitignore
new file mode 100644
index 000000000..717394d0b
--- /dev/null
+++ b/extra/push-examples/.gitignore
@@ -0,0 +1,3 @@
+java/Index.class
+csharp/index.exe
+typescript-fetch/index.js
diff --git a/extra/push-examples/bash-curl/index.sh b/extra/push-examples/bash-curl/index.sh
new file mode 100644
index 000000000..54b7626cc
--- /dev/null
+++ b/extra/push-examples/bash-curl/index.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+PUSH_URL="https://example.com/api/push/key?status=up&msg=OK&ping="
+INTERVAL=60
+
+while true; do
+    curl -s -o /dev/null $PUSH_URL
+    echo "Pushed!"
+    sleep $INTERVAL
+done
diff --git a/extra/push-examples/csharp/index.cs b/extra/push-examples/csharp/index.cs
new file mode 100644
index 000000000..94eecfb84
--- /dev/null
+++ b/extra/push-examples/csharp/index.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Net;
+using System.Threading;
+
+/**
+ * Compile: C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe index.cs
+ * Run: index.exe
+ */
+class Index
+{
+    const string PushURL  = "https://example.com/api/push/key?status=up&msg=OK&ping=";
+    const int Interval = 60;
+
+    static void Main(string[] args)
+    {
+        while (true)
+        {
+            WebClient client = new WebClient();
+            client.DownloadString(PushURL);
+            Console.WriteLine("Pushed!");
+            Thread.Sleep(Interval * 1000);
+        }
+    }
+}
diff --git a/extra/push-examples/go/index.go b/extra/push-examples/go/index.go
new file mode 100644
index 000000000..2e518e74e
--- /dev/null
+++ b/extra/push-examples/go/index.go
@@ -0,0 +1,20 @@
+package main
+
+import (
+	"fmt"
+	"net/http"
+	"time"
+)
+
+func main() {
+	const PushURL = "https://example.com/api/push/key?status=up&msg=OK&ping="
+	const Interval = 60
+
+	for {
+		_, err := http.Get(PushURL)
+		if err == nil {
+			fmt.Println("Pushed!")
+		}
+		time.Sleep(Interval * time.Second)
+	}
+}
diff --git a/extra/push-examples/java/index.java b/extra/push-examples/java/index.java
new file mode 100644
index 000000000..5a773428a
--- /dev/null
+++ b/extra/push-examples/java/index.java
@@ -0,0 +1,32 @@
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+/**
+ * Compile: javac index.java
+ * Run: java Index
+ */
+class Index {
+
+    public static final String PUSH_URL = "https://example.com/api/push/key?status=up&msg=OK&ping=";
+    public static final int INTERVAL = 60;
+
+    public static void main(String[] args) {
+        while (true) {
+            try {
+                URL url = new URL(PUSH_URL);
+                HttpURLConnection con = (HttpURLConnection) url.openConnection();
+                con.setRequestMethod("GET");
+                con.getResponseCode();
+                con.disconnect();
+                System.out.println("Pushed!");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            try {
+                Thread.sleep(INTERVAL * 1000);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/extra/push-examples/javascript-fetch/index.js b/extra/push-examples/javascript-fetch/index.js
new file mode 100644
index 000000000..cb664513c
--- /dev/null
+++ b/extra/push-examples/javascript-fetch/index.js
@@ -0,0 +1,10 @@
+const pushURL = "https://example.com/api/push/key?status=up&msg=OK&ping=";
+const interval = 60;
+
+const push = async () => {
+    await fetch(pushURL);
+    console.log("Pushed!");
+};
+
+push();
+setInterval(push, interval * 1000);
diff --git a/extra/push-examples/javascript-fetch/package.json b/extra/push-examples/javascript-fetch/package.json
new file mode 100644
index 000000000..78aefc234
--- /dev/null
+++ b/extra/push-examples/javascript-fetch/package.json
@@ -0,0 +1,5 @@
+{
+    "scripts": {
+        "start": "node index.js"
+    }
+}
diff --git a/extra/push-examples/php/index.php b/extra/push-examples/php/index.php
new file mode 100644
index 000000000..6c981ba11
--- /dev/null
+++ b/extra/push-examples/php/index.php
@@ -0,0 +1,14 @@
+<?php
+const PUSH_URL = "https://example.com/api/push/key?status=up&msg=OK&ping=";
+const interval = 60;
+
+while (true) {
+    $ch = curl_init();
+    curl_setopt($ch, CURLOPT_URL, PUSH_URL);
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+    curl_exec($ch);
+    curl_close($ch);
+    echo "Pushed!\n";
+    sleep(interval);
+}
+
diff --git a/extra/push-examples/powershell/index.ps1 b/extra/push-examples/powershell/index.ps1
new file mode 100644
index 000000000..b3f0159e5
--- /dev/null
+++ b/extra/push-examples/powershell/index.ps1
@@ -0,0 +1,8 @@
+$pushURL = "https://example.com/api/push/key?status=up&msg=OK&ping="
+$interval = 60
+
+while ($true) {
+    $res = Invoke-WebRequest -Uri $pushURL
+    Write-Host "Pushed!"
+    Start-Sleep -Seconds $interval
+}
diff --git a/extra/push-examples/python/index.py b/extra/push-examples/python/index.py
new file mode 100644
index 000000000..d541d7f43
--- /dev/null
+++ b/extra/push-examples/python/index.py
@@ -0,0 +1,11 @@
+import urllib.request
+import time
+
+push_url = "https://example.com/api/push/key?status=up&msg=OK&ping="
+interval = 60
+
+while True:
+    urllib.request.urlopen(push_url)
+    print("Pushed!\n")
+    time.sleep(interval)
+
diff --git a/extra/push-examples/typescript-fetch/README.md b/extra/push-examples/typescript-fetch/README.md
new file mode 100644
index 000000000..cf93439b7
--- /dev/null
+++ b/extra/push-examples/typescript-fetch/README.md
@@ -0,0 +1,19 @@
+
+Node.js (ts-node)
+
+```bash
+ts-node index.ts
+```
+
+Deno
+
+```bash
+deno run --allow-net index.ts
+```
+
+Bun.js
+
+```bash
+bun index.ts
+```
+
diff --git a/extra/push-examples/typescript-fetch/index.ts b/extra/push-examples/typescript-fetch/index.ts
new file mode 100644
index 000000000..6a4b0a552
--- /dev/null
+++ b/extra/push-examples/typescript-fetch/index.ts
@@ -0,0 +1,10 @@
+const pushURL : string = "https://example.com/api/push/key?status=up&msg=OK&ping=";
+const interval : number = 60;
+
+const push = async () => {
+    await fetch(pushURL);
+    console.log("Pushed!");
+};
+
+push();
+setInterval(push, interval * 1000);
diff --git a/extra/push-examples/typescript-fetch/package.json b/extra/push-examples/typescript-fetch/package.json
new file mode 100644
index 000000000..9d7e97443
--- /dev/null
+++ b/extra/push-examples/typescript-fetch/package.json
@@ -0,0 +1,13 @@
+{
+    "scripts": {
+        "ts-node": "ts-node index.ts",
+        "deno": "deno run --allow-net index.ts",
+        "bun": "bun index.ts"
+    },
+    "devDependencies": {
+        "@types/node": "^20.6.0",
+        "ts-node": "^10.9.1",
+        "tslib": "^2.6.2",
+        "typescript": "^5.2.2"
+    }
+}