Code Monkey home page Code Monkey logo

atx-server's Introduction

Deprecated

Please use https://github.com/openatx/atxserver2 instead.


ATX-SERVER

GitHub stars Build Status

Manage batch of atx-agents

Testerhome上相关文章

Install

重要:需要有go语言的基础,知道该如何编译一个go的程序

  1. Install and start rethinkdb
  2. Install go

Compile with go

$ go get -v github.com/openatx/atx-server
$ cd $GOPATH/src/github.com/openatx/atx-server
$ go build

Usage

launch rethinkdb

$ rethinkdb
Running rethinkdb 2.3.6 (CLANG 8.1.0 (clang-802.0.42))...
Running on Darwin 16.6.0 x86_64
...

launch atx-server

./atx-server --port 8000

Install atx-agent using uiautomator2 into android phone. your android phone and server running atx-server should in the same intranet.

Suppose server running atx-server got the ip 10.0.1.1, listen port 8000. Do the following command

$ pip install -U --pre uiautomator2
$ python -m uiautomator2 init 10.0.1.1:8000

open browser http://localhost:8000, you should see the device listed on the web.

Advanced usage

Set up https://www.dingtalk.com notification.

  1. Usage command flag

    ./atx-server --ding-token 13gb4db7c276d22e84f788fa693b729d53218b8e07d6ede43de79360c962 --port 8080
    
  2. Set up env var

    export DING_TOKEN="13gb4db7c276d22e84f788fa693b729d53218b8e07d6ede43de79360c962"
    ./atx-server --port 8080
    

APIs

/list 接口

其中udid是通过hwaddr, model, serial组合生成的

$ curl $SERVER_URL/list
[
    {
        "udid": "741AEDR42P6YM-2c:57:31:4b:40:74-M2_E",
        "ip": "10.240.218.20",
        "present": true,
        "ready": true,
        "using": true,
        "provider": null,
        "serial": "741AEDR42P6YM",
        "brand": "Meizu",
        "model": "M2 E",
        "hwaddr": "2c:57:31:4b:40:74",
        "agentVersion": "0.1.1",
        "battery": {},
        "display": {
            "width": 1080,
            "height": 1920
        }
    }
]

There are some fields you need pay attention.

  • present means device is online
  • ready is the thumb 👍 you can see and edit in the web
  • using means if device is using by someone

provider is a special field, if device is plugged into some machine which running u2init, the bellow info can be found in device info.

"provider": {
    "id": "33576428",
    "ip": "10.0.0.1",
    "port": 10000,
    "present": true  # provider online of not
}

if provider is null it means device is not plugged-in.

/devices/{query}/info

$ curl $SERVER_URL/devices/ip:10.0.0.1/info
# or
$ curl $SERVER_URL/devices/$UDID/info

返回值同/list的的单个结果,这里就不写了。

/version

atx-agent通过检测该接口确定是否升级

$ curl /version
{
    "server": "dev",
    "atx-agent": "0.0.7"
}

执行shell命令

$ curl -X POST -F command="pwd" $SERVER_URL/devices/{query}/shell
{
    "output": "/"
}

设备管理

占用、释放

状态码 成功200,失败403

占用设备

$ curl -X POST $SERVER_URL/devices/{query}/reserved
Success

释放设备

状态码 成功200,失败403

$ curl -X DELETE $SERVER_URL/devices/{query}/reserved
Release success

随机占用一台设备

$ curl -X POST $SERVER_URL/devices/:random/reserved
Success

Communication between provider(u2init) and server(atx-server)

Provider send POST to Server heartbeat info to let server known provider is online. It is also need to send the same data to Server in 15s or the Provider will be marked offline.

$ curl -X POST -F id=$PROVIDER_ID -F port=11000 $SERVER_URL/provider/heartbeat

You may need to add ip field if provider and server is not in the same network

$ PROVIDER_IP=10.0.0.1 # change to your provider ip
$ PROVIDER_ID=ccdd11ff # change to your provider id
$ curl -X POST \
    -F ip=$PROVIDER_IP \
    -F id=$PROVIDER_ID \
    -F port=11000 \
    $SERVER_URL/provider/heartbeat

Server response status 200 indicate success, or 400 and else means failure

Send using bellow command when there is device plugged-in

$ DEVICE_UDID="3578298f-b4:0b:44:e6:1f:90-OD103" # change to your device udid
$ DATA="{\"status\": \"online\", \"udid\": \"$DEVICE_UDID\"}"
$ curl -X POST \
    -F id=$PROVIDER_ID \
    -F port=11000 \
    -F data="$DATA"  $SERVER_URL/provider/heartbeat

Comminication between atx-agent and atx-server

It is complicated. Hard to write.

Docker

atx-server is dockerized (based on golang image) and depends on the official rethinkdb container. To build and run all services, use:

docker-compuse up --build

atx-server can be accessed from localhost:8000 and rethinkdb web console is available at localhost:8001, both specified in the compose file. rethinkdb data is stored at $PWD/data (host volume).

References and some good resources

LICENSE

MIT

atx-server's People

Contributors

codeskyblue avatar danielyang990 avatar mingyuan-xia avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

atx-server's Issues

设备第一次连接时web页面信息显示不全

设备第一次连接时web页面显示信息不全,如只会显示IP,其他信息如Serial,版本号等都没有显示,如下图:
image

我使用如下API测试发现Serial,版本号等信息也是没有的

curl 192.168.1.230:8000/list

必须把设备重启一次后才会显示完整信息,请问你那边有这种现象吗?

执行uiautomator脚本失败

image
执行uiautomator脚本一直提示连不上uiautomator,其他功能都正常~

补充下:
小米手机正常的,坚果pro2 不好使

atx-server管理的在线设备和离线设备检测不准确,或者没有在线与否的标志位

按照下图方法获取atx-server管理的在线ip
image
image
用如图所示的present 属性判断设备是否在线,测试的三部手机,都曾经上过线,在atx-server里有记录,然后一部手机关机,一部掉线,一部在线,但是这个标志位一直都为True,然后测试代码跑起来自然连接不上其他两部不在线的手机,报拒绝访问的错误,控制台只显示在线手机online,其他两部掉线手机控制台没任何信息输出,web管理界面有三部手机信息

init 失败

ialing ...
2018-12-14 16:17:39,775 - main.py:133 - INFO - install minicap
2018-12-14 16:17:39,994 - main.py:140 - INFO - install minitouch
2018-12-14 16:17:40,428 - main.py:168 - INFO - apk(1.1.7) already installed,
skip
2018-12-14 16:17:40,429 - main.py:350 - INFO - atx-agent is already running,
force stop
2018-12-14 16:17:41,041 - main.py:227 - INFO - atx-agent(0.5.1) is installin
g, please be patient
Traceback (most recent call last):
File "C:\Python37\lib\runpy.py", line 193, in run_module_as_main
"main", mod_spec)
File "C:\Python37\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "C:\Python37\lib\site-packages\uiautomator2_main
.py", line 424, in
main()
File "C:\Python37\lib\site-packages\uiautomator2_main
.py", line 420, in ma
in
fire.Fire(MyFire)
File "C:\Python37\lib\site-packages\fire\core.py", line 127, in Fire
component_trace = Fire(component, args, context, name)
File "C:\Python37\lib\site-packages\fire\core.py", line 366, in Fire
component, remaining_args)
File "C:\Python37\lib\site-packages\fire\core.py", line 542, in CallCallable
result = fn(*varargs, **kwargs)
File "C:\Python37\lib\site-packages\uiautomator2_main
.py", line 331, in in
it
ignore_apk_check)
File "C:\Python37\lib\site-packages\uiautomator2_main
.py", line 356, in i
nit_with_serial
ins.install_atx_agent(agent_version, reinstall)
File "C:\Python37\lib\site-packages\uiautomator2_main
.py", line 242, in in
stall_atx_agent
path = cache_download(url)
File "C:\Python37\lib\site-packages\uiautomator2_main
.py", line 78, in cac
he_download
raise Exception("status code", r.status_code)
Exception: ('status code', 404)

atx-server重构计划

  • 使用Python3重写(用来降低开发和维护难度)
  • WOL的支持 ref: #22
  • 同时支持USB设备和WIFI设备
  • 支持adb connect
  • 支持登录认证
  • 显示每台设备的使用率
  • 支持多机同时控制 (多设备控制的控制可以将功能简化下,只保留点击和滑动)
  • 心跳协议使用websocket或者UDP,放弃原来的HTTP (这里的实现需要注意下 websocket重连的问题)
  • 支持跨网段的设备连接(比如家里的设备)
  • 页面元素解析

新项目地址:https://github.com/openatx/atxserver2

执行go get -v github.com/openatx/atx-server报错

C:\Users\Administrator>go get -v github.com/openatx/atx-server
github.com/openatx/atx-server

github.com/openatx/atx-server

go\src\github.com\openatx\atx-server\httpserver.go:397:5: hbs.OnReconnect undefi
ned (type *heartbeat.Server has no field or method OnReconnect)

一个小问题?

image

点击锁屏的话,虽然下面只勾选了1号,但是其他的也都跟着黑屏了。

ATX-Server 管理页面不能打开

上周搭建好环境的时候,server 页面还能加载,今天就完全不行了。 运行报错:
\atx-server.exe --port 8060

运行看到有打印信息:
C:/Go/src/net/http/server.go:1847 +0x64d
created by net/http.(*Server).Serve
C:/Go/src/net/http/server.go:2851 +0x2fc
2019/01/22 17:27:47 http: panic serving [::1]:4585: html/template: pattern matches no files: templates/*.html
goroutine 61 [running]:
net/http.(*conn).serve.func1(0xc000164500)
C:/Go/src/net/http/server.go:1746 +0xd7

看了是找不到html 文件,有去文件下检查,的确也没有,这个改如何解决呢?

[Need Help]Can not figure out how the device info is updated by closing the remote tab

Hi sir,
I am reading the code. Got into some confuse, could u kindly help me?

https://github.com/openatx/atx-server/blob/master/templates/remote.html#L70
When close a tab, the device is auto released. And using filed in the device info is updated in db, then the index page can update the device using status.
Here what I don't understand is I don't see any release api called when closing the tab, how is the using filed updated.

Thanks.

网页的手机适配

想在uiautomator.apk上加一个控制另外一台手机的功能,实现手机上操控另外一台手机。
但是发现手机上的chrome没法上下左右滑动,只能点击。
希望能加个滑动事件。。
qq 20180628190308

windows下获取不到设备列表

server也起来了,init也成功了 ,网络也能ping通的 ,杀毒软件 防火墙之类的也关了,手机上允许USB模拟权限开启了,更换过一台设备但是网页上还是没有出现设备。
$ curl 127.0.0.1:8000/list null
PC:windows 10
手机:小米5s\红米note5
image
请老师帮忙分析一下原因,另外,文档中提到的API,我从哪里可以看到并编辑呢?
$ curl $SERVER_URL/list [ { "udid": "741AEDR42P6YM-2c:57:31:4b:40:74-M2_E", "ip": "10.240.218.20", "present": true, "ready": true, "using": true, "provider": null, "serial": "741AEDR42P6YM", "brand": "Meizu", "model": "M2 E", "hwaddr": "2c:57:31:4b:40:74", "agentVersion": "0.1.1", "battery": {}, "display": { "width": 1080, "height": 1920 } } ]

远程唤醒功能实现

我想在控制页面增加一个远程唤醒的功能,如WOL(Wake On Lan),但是要实现这个功能需要发送UDP广播,我对前端不是太了解,想请问下有没有什么方式可以实现在控制页面发送UDP广播呢?谢谢!

Lenovo P1c58手机 - remote操作手机应用无效

Issue and steps to reproduce (复现步骤)

联想P1C58 - 使用remote操作手机应用无效(点击+滑动)

  • 手机型号: Lenovo P1c58(系统版本:6.0.1(23))

Screenshots (相关截图)

debugx5

python -m uiautomator2 init 10.0.1.1:8000 报错

C:\Users\Administrator>python -m uiautomator2 init 10.0.1.1:8000
2018-05-08 14:26:59,427 - main.py:254 - INFO - atx-server addr 10.0.1.1:8000

2018-05-08 14:26:59,506 - main.py:269 - INFO - Detect pluged devices: ['980f
5397']
2018-05-08 14:26:59,507 - main.py:286 - INFO - Device(980f5397) initialing .
..
�[Kminicap.so |################################| 13.2K / 13.2K
�[?25h2018-05-08 14:27:09,736 - main.py:113 - INFO - install minicap
�[Kminicap |################################| 357.9K / 357.9K
�[?25h2018-05-08 14:27:22,467 - main.py:120 - INFO - install minitouch
�[Kminitouch |################################| 29.5K / 29.5K
�[?25h2018-05-08 14:27:27,442 - main.py:143 - INFO - app-uiautomator.apk(1.0
.13) installing ...
Traceback (most recent call last):
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 601, in u
rlopen
chunked=chunked)
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 387, in _
make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 383, in _
make_request
httplib_response = conn.getresponse()
File "C:\Python36\lib\http\client.py", line 1331, in getresponse
response.begin()
File "C:\Python36\lib\http\client.py", line 297, in begin
version, status, reason = self._read_status()
File "C:\Python36\lib\http\client.py", line 266, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python36\lib\site-packages\requests\adapters.py", line 440, in send
timeout=timeout
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 639, in u
rlopen
_stacktrace=sys.exc_info()[2])
File "C:\Python36\lib\site-packages\urllib3\util\retry.py", line 357, in incre
ment
raise six.reraise(type(error), error, _stacktrace)
File "C:\Python36\lib\site-packages\urllib3\packages\six.py", line 685, in rer
aise
raise value.with_traceback(tb)
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 601, in u
rlopen
chunked=chunked)
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 387, in _
make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "C:\Python36\lib\site-packages\urllib3\connectionpool.py", line 383, in _
make_request
httplib_response = conn.getresponse()
File "C:\Python36\lib\http\client.py", line 1331, in getresponse
response.begin()
File "C:\Python36\lib\http\client.py", line 297, in begin
version, status, reason = self._read_status()
File "C:\Python36\lib\http\client.py", line 266, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Re
mote end closed connection without response',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python36\lib\runpy.py", line 193, in run_module_as_main
"main", mod_spec)
File "C:\Python36\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "C:\Python36\lib\site-packages\uiautomator2_main
.py", line 352, in
main()
File "C:\Python36\lib\site-packages\uiautomator2_main
.py", line 348, in ma
in
fire.Fire(MyFire)
File "C:\Python36\lib\site-packages\fire\core.py", line 127, in Fire
component_trace = Fire(component, args, context, name)
File "C:\Python36\lib\site-packages\fire\core.py", line 366, in Fire
component, remaining_args)
File "C:\Python36\lib\site-packages\fire\core.py", line 542, in CallCallable
result = fn(*varargs, **kwargs)
File "C:\Python36\lib\site-packages\uiautomator2_main
.py", line 273, in in
it
ignore_apk_check)
File "C:\Python36\lib\site-packages\uiautomator2_main
.py", line 291, in i
nit_with_serial
ins.install_uiautomator_apk(apk_version, reinstall)
File "C:\Python36\lib\site-packages\uiautomator2_main
.py", line 144, in in
stall_uiautomator_apk
path = cache_download(app_url)
File "C:\Python36\lib\site-packages\uiautomator2_main
.py", line 73, in cac
he_download
r = requests.get(url, stream=True)
File "C:\Python36\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "C:\Python36\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python36\lib\site-packages\requests\sessions.py", line 508, in reques
t
resp = self.send(prep, **send_kwargs)
File "C:\Python36\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "C:\Python36\lib\site-packages\requests\adapters.py", line 490, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected(
'Remote end closed connection without response',))

atx-server每次重新启动建议把数据库中presen字段默认全部置为false

在atx-server服务关闭时,已经在线的设备有可能掉线,消息无法发送到服务器数据库中。当atx-server服务再次开启时,数据库中presen仍然为True,其实设备已经掉线,这样会导致连接设备测试时出错,因此建议atx-server每次重新启动建议把数据库中presen字段默认全部置为false
image

../../../gopkg.in/gorethink/gorethink.v4/connection_handshake.go:17:2: cannot find package "golang.org/x/crypto/pbkdf2" in any of:

日志:
liyudeMacBook-Pro:atx-server liyu$ go build
../../../gopkg.in/gorethink/gorethink.v4/connection_handshake.go:17:2: cannot find package "golang.org/x/crypto/pbkdf2" in any of:
/usr/local/go/src/golang.org/x/crypto/pbkdf2 (from $GOROOT)
/Users/liyu/go/src/golang.org/x/crypto/pbkdf2 (from $GOPATH)
../../sirupsen/logrus/terminal_check_notappengine.go:9:2: cannot find package "golang.org/x/crypto/ssh/terminal" in any of:
/usr/local/go/src/golang.org/x/crypto/ssh/terminal (from $GOROOT)
/Users/liyu/go/src/golang.org/x/crypto/ssh/terminal (from $GOPATH)
../../cenkalti/backoff/context.go:6:2: cannot find package "golang.org/x/net/context" in any of:
/usr/local/go/src/golang.org/x/net/context (from $GOROOT)
/Users/liyu/go/src/golang.org/x/net/context (from $GOPATH)
../../sirupsen/logrus/terminal_bsd.go:6:8: cannot find package "golang.org/x/sys/unix" in any of:
/usr/local/go/src/golang.org/x/sys/unix (from $GOROOT)
/Users/liyu/go/src/golang.org/x/sys/unix (from $GOPATH)
liyudeMacBook-Pro:atx-server liyu$

挂载手机设备失败

  1. connect phone to Mac,uninstall uiautomator
    image

  2. start rethinkdb
    image

  3. start atx-server
    image

  4. go to localhost:8000, no device connected
    image

  5. init atx-agent successfully(uiautomator2 already installed)
    image

  6. refresh localhost:8000, still no device connected.
    image

  7. rethinkdb console:
    image

Note:
Phone IP: 10.2.200.89
Mac IP: 10.2.200.84
Phone: Samsung Galaxy A5
Android Version: 6.0.1

atx-agent log:

2018/05/24 08:01:12 main.go:1287: Ignore SIGHUP
2018/05/24 08:01:12 main.go:1291: Kill server
2018/05/24 08:01:12 main.go:1294: wait previous server stopped
atx-agent version 0.3.2
Listen on http://10.2.200.156:7912
2018/05/24 08:01:15 cmdctrl.go:27: DEBUG start args: [am instrument -w -r -e debug false -e class com.github.uiautomator.stub.Stub com.github.uiautomator.test/android.support.test.runner.AndroidJUnitRunner], env: []
2018/05/24 08:01:15 cmdctrl.go:27: DEBUG program pid: 9146
2018/05/24 08:01:15 main.go:745: rotation change received: 0
2018/05/24 08:01:15 cmdctrl.go:27: DEBUG cmd args: [/data/local/tmp/minicap -S -P 720x1280@800x800/0]2018/05/24 08:01:16 main.go:745: rotation change received: 0
2018/05/24 08:01:16 cmdctrl.go:27: DEBUG cmd args: [/data/local/tmp/minicap -S -P 720x1280@800x800/0]
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.github.uiautomator.stub.Stub:
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=testUIAutomatorStub
INSTRUMENTATION_STATUS: class=com.github.uiautomator.stub.Stub
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
2018/05/24 08:01:21 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 14s
2018/05/24 08:01:40 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 13s
2018/05/24 08:01:58 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 12s
2018/05/24 08:02:15 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 13s
2018/05/24 08:02:33 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 12s
2018/05/24 08:02:50 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 10s
2018/05/24 08:03:05 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 11s
2018/05/24 08:03:21 heartbeat.go:171: heatbeat err: post form: Post http://10.2.200.84:8000/heartbeat: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), retry after 13s

atx-server 检测不到android手机

插入手机到mac后
由于 python -m uiautomator2 init localhost:8000 的方法的install_minicap等方法出现SSLError的问题,我手动下载了app-uiautomator.apk,minitouch,minicap.so, atx-agent并上传至android手机,然后执行launch_and_check的方法启动agent成功。通过 curl $DEVICE_URL/info 也可以获得手机的info信息

但我打开atx-server --port 8000后查看 localhost:8000 没有看到有手机绑定过来,查看rethinkdb也是没有手机信息的,保证是同一个网络的,应该怎样排查呢。我看到 main.go 里有以下代码,不太理解到底是atx-server主动获取android info的并记录到rethinkdb的,还是atx-agent主动上传信息到rethinkdb的。

// Read device info message := &proto.CommonMessage{} if err := ws.ReadJSON(message); err != nil { log.Warn("error: read json message") return }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.